native 订阅
native是一个计算机函数,一个Native Method就是一个Java调用非Java代码的接口。方法的实现由非Java语言实现,比如C或C++。 展开全文
native是一个计算机函数,一个Native Method就是一个Java调用非Java代码的接口。方法的实现由非Java语言实现,比如C或C++。
信息
外文名
native
类    型
计算机术语
中文名
原生方法
软    件
Java
nativeNative Method(原生方法)
"A native method is a Java method whose implementation is provided by non-java code." [1]  在定义一个native method时,并不提供实现体(有些像定义一个Java Interface),因为其实现体是由非Java语言在外面实现的。下面给了一个示例:这些方法的声明描述了一些非Java代码在这些Java代码里看起来像什么样子(view).标识符native可以与所有其它的java标识符连用,但是abstract除外。这是合理的,因为native暗示这些方法是有实现体的,只不过这些实现体是非java的,但是abstract却显然的指明这些方法无实现体。native与其它java标识符连用时,其意义同非Native Method并无差别,比如native static表明这个方法可以在不产生类的实例时直接调用,这非常方便,比如当你想用一个native method去调用一个C的类库时。上面的第三个方法用到了native synchronized,JVM在进入这个方法的实现体之前会执行同步锁机制(就像java的多线程。)一个native method方法可以返回任何java类型,包括非基本类型,而且同样可以进行异常控制。这些方法的实现体可以制一个异常并且将其抛出,这一点与java的方法非常相似。当一个native method接收到一些非基本类型时如Object或一个整型数组时,这个方法可以访问这些非基本型的内部,但是这将使这个native方法依赖于你所访问的java类的实现。有一点要牢牢记住:我们可以在一个native method的本地实现中访问所有的java特性,但是这要依赖于你所访问的java特性的实现,而且这样做远远不如在java语言中使用那些特性方便和容易。native method的存在并不会对其他类调用这些本地方法产生任何影响,实际上调用这些方法的其他类甚至不知道它所调用的是一个本地方法。JVM将控制调用本地方法的所有细节。需要注意当我们将一个本地方法声明为final的情况。用java实现的方法体在被编译时可能会因为内联而产生效率上的提升。但是一个native final方法是否也能获得这样的好处却是值得怀疑的,但是这只是一个代码优化方面的问题,对功能实现没有影响。如果一个含有本地方法的类被继承,子类会继承这个本地方法并且可以用java语言重写这个方法(这个似乎看起来有些奇怪),同样的如果一个本地方法被final标识,它被继承后不能被重写。本地方法非常有用,因为它有效地扩充了JVM。事实上,我们所写的Java代码已经用到了本地方法,在Sun的Java的并发(多线程)的机制实现中,许多与操作系统的接触点都用到了本地方法,这使得java程序能够超越Java运行时的界限。有了本地方法,Java程序可以做任何应用层次的任务。
收起全文
精华内容
下载资源
问答
  • 完全征服React Native

    万人学习 2016-08-22 11:47:32
    React Native是Facebook于2015年推出的跨平台开发... 本课程采用新的ES6开发,主要内容包括ReactNative的基础知识,ReactNative的布局,组件,API,封装本地API和组件,发布ReactNative App,本地与ReactNative深度结合
  • Spring Native入门

    千次阅读 2021-03-26 16:12:43
    spring-native介绍 背景: Spring 团队日前发布了 Spring Native Beta 版。通过 Spring Native,Spring 应用将有机会以 GraalVM 原生镜像的方式运行。为了更好地支持原生运行,Spring Native 提供了 Maven 和 ...

    spring-native介绍

    原创作者:DDY

    背景:

    Spring 团队日前发布了 Spring Native Beta 版。通过 Spring Native,Spring 应用将有机会以 GraalVM 原生镜像的方式运行。为了更好地支持原生运行,Spring Native 提供了 Maven 和 Gradle 插件,并且提供了优化原生配置的注解。


    特点:
    基于native images: GraalVM 进行代码编译

    优点:
    1.立即启动,一般启动时间小于100ms
    2.更低的内存消耗
    3.独立部署,不再需要JVM
    4.同样的峰值性能要比JVM消耗的内存小
    缺点:
    1.构建时间长
    2.只支持新的Springboot版本(Spring Native 0.9.0 supports Spring Boot 2.4.3, Spring Native 0.9.1 will support Spring Boot 2.4.4, etc.)

    评估:

    DDY的评估页

    新版本说明:

    (一) 本系统基于0.91版本建设,新版本说明见《spring-native新版本说明

    (二)作者已完成基于0.10.1版本的详细编制攻略,觉得本文编程部分写得不清晰的同学请移步《基于spring-native 0.10.1版本的完整初级入门流程

    操作命令:
    1. mvn spring-boot:build-image
    2. gradle bootBuildImage

    实践:
    1.新建一个2.4.4版本的springboot项目。

    2.在pom.xml的位置使用命令mvn spring-boot:build-image构建。

    配置阿里云的maven 代理仓库:
    <repository>
    <id>grails-core</id>
    <url>https://maven.aliyun.com/repository/grails-core</url>
    <releases>
    <enabled>true</enabled>
    </releases>
    <snapshots>
    <enabled>true</enabled>
    </snapshots>
    </repository>


    在项目POM中引入依赖:

    <dependency>
        <groupId>org.springframework.experimental</groupId>
        <artifactId>spring-native</artifactId>
        <version>0.9.1-20210321.194059-39</version>
    </dependency>

    <plugin>
        <groupId>org.springframework.experimental</groupId>
        <artifactId>spring-aot-maven-plugin</artifactId>
        <version>0.9.1</version>
        <executions>
            <execution>
                <id>test-generate</id>
                <goals>
                    <goal>test-generate</goal>
                </goals>
            </execution>
            <execution>
                <id>generate</id>
                <goals>
                    <goal>generate</goal>
                </goals>
            </execution>
        </executions>
    </plugin>


    Spring AOT 插件
    Spring AOT插件执行提前转换,以提高native image的兼容性和内存占用。
    提示:转换也适用于JVM,所以无论如何这都可以应用。

    参考代码:

    https://gitee.com/godlife_077/spring-boot-native#https://blog.csdn.net/sinat_20259781/article/details/115249120

    参考链接:

    spring-native官方文档:

    https://docs.spring.io/spring-native/docs/current/reference/htmlsingle/#getting-started-native-image

    spring.io上的项目介绍:

    https://spring.io/blog/2021/03/11/announcing-spring-native-beta

    GitHub仓库:

    https://github.com/spring-projects-experimental/spring-native

    基于spring-native 0.10.1版本的完整初级入门流程

    闷棍暴打面试官 SpringNative 源码系列: (一) 打造更适合Spring的原生镜像

    【jar 很大,你忍一下】GraalVM 21.2 发布,大量实用性改进

    展开全文
  • native和static native区别

    万次阅读 2016-09-26 16:41:48
    本文基于Hello JNI ...native 与 static nativejava中 public native String helloJni(); public native static String helloJniStatic();JNI中JNIEXPORT jstring JNICALL Java_com_test_git_jnidemo_Jni

    本文基于Hello JNI
    如有疑惑,请看之前几篇文章。

    native 与 static native

    java中

        public native String helloJni();
        public native static String helloJniStatic();

    JNI中

    JNIEXPORT jstring JNICALL Java_com_test_git_jnidemo_JniUtil_JniDemo_helloJni
      (JNIEnv *, jobject);
    
    JNIEXPORT jstring JNICALL Java_com_test_git_jnidemo_JniUtil_JniDemo_helloJniStatic
      (JNIEnv *, jclass);

    区别在于第二个参数是jobject还是jclass,和java中static方法属于类而不属于对象一样,static 的native方法属于类,所以第二个参数是jclass而不是jobject。

    jobject获取jclass

    jclass cls = env->GetObjectClass(jobj);

    注意:这里获取到的cls是已有对象的cls。

    jclass获取jobject

    jmethodID cid = env->GetMethodID(cls, "<init>", "()V");
    jobject  jobj = env->NewObject(cls, cid);

    注意:这里获取到的jobj已经是一个新的对象。

    下面看一组对比Demo

    通过jobject获取jclass,并修改对象中的age字段

    JNIEXPORT jstring JNICALL Java_com_test_git_jnidemo_JniUtil_JniDemo_helloJni
      (JNIEnv *env, jobject jobj){
        jclass cls = env->GetObjectClass(jobj);
        //2.获取age的jfieldID 注意用GetStaticFieldID方法
        jfieldID jfid = env->GetStaticFieldID(cls, "age", "I");
        //3.通过jfid获取age的属性值,注意用GetStaticIntField
        jint jage = env->GetStaticIntField(cls, jfid);
        jage += 10;
        //4.修改age的属性值,注意用GetStaticIntField
        env->SetStaticIntField(cls,jfid, jage);
        return env->NewStringUTF("hello jni");
      }

    通过jclass获取jobject,然后修改courses数组中第一个元素的值

    JNIEXPORT void jclsToJobj(JNIEnv *env, jclass cls) {
        jmethodID cid = env->GetMethodID(cls, "<init>", "()V");
        jobject  jobj = env->NewObject(cls, cid);
        jfieldID fid = env->GetFieldID(cls, "courses", "[Ljava/lang/String;");
        jobjectArray jarray = (jobjectArray) env->GetObjectField(jobj, fid);
        env->SetObjectArrayElement(jarray, 0, env->NewStringUTF("美术"));
    }
    
    jstring JNICALL Java_com_test_git_jnidemo_JniUtil_JniDemo_helloJniStatic
            (JNIEnv *env, jclass cls){
        //jclass 转换成 jobject
        jclsToJobj(env, cls);
    
        //2.获取age的jfieldID 注意用GetStaticFieldID方法
        jfieldID jfid = env->GetStaticFieldID(cls, "age", "I");
        //3.通过jfid获取age的属性值,注意用GetStaticIntField
        jint jage = env->GetStaticIntField(cls, jfid);
        jage += 10;
        //4.修改age的属性值,注意用GetStaticIntField
        env->SetStaticIntField(cls,jfid, jage);
        return env->NewStringUTF("hello jni static");
    };

    MainActivity.java中运行两个方法

            JniDemo jd = new JniDemo();
            Log.i(TAG, "age修改前: " + jd.age);
            Log.i(TAG, "helloJni->" + jd.helloJni());
            Log.i(TAG, "age修改后: " + jd.age);
    
            Log.i(TAG, "------------------------------------------");
    
            Log.i(TAG, "age修改前: " + jd.age);
            Log.i(TAG, "courses修改前: " + jd.courses[0]);
            JniDemo.helloJniStatic();
            Log.i(TAG, "age修改后: " + jd.age);
            Log.i(TAG, "courses修改后: " + jd.courses[0]);

    输出结果:

    09-26 16:29:27.634 3969-3969/? I/MainActivity-: age修改前: 10
    09-26 16:29:27.634 3969-3969/? I/MainActivity-: helloJni->hello jni
    09-26 16:29:27.634 3969-3969/? I/MainActivity-: age修改后: 20
    09-26 16:29:27.634 3969-3969/? I/MainActivity-: ------------------------------------------
    09-26 16:29:27.634 3969-3969/? I/MainActivity-: age修改前: 20
    09-26 16:29:27.634 3969-3969/? I/MainActivity-: courses修改前: 语文
    09-26 16:29:27.634 3969-3969/? I/MainActivity-: age修改后: 30
    09-26 16:29:27.634 3969-3969/? I/MainActivity-: courses修改后: 语文

    可见通过jclass获取的jobject是一个新的对象,并不会改变已有对象的值。

    展开全文
  • react native error

    万次阅读 2018-02-27 23:32:17
    react native Error react native Error: spawn cmd.exe ENOENT 没有启动react-native start 命令。 正确的启动react-native方式是: react-native start react-native run-android bulid failed ...

    react native Error

    react native Error: spawn cmd.exe ENOENT

    没有启动react-native start 命令。
    正确的启动react-native方式是:

    • react-native start
    • react-native run-android

    bulid failed

     Could not get unknown property 'MYAPP_RELEASE_STORE_FILE' for SigningConfig_Decorated{name=release, storeFile=null, storePassword=null, keyAlias=null, keyPassword=null, storeType=null, v1SigningEnabled=true, v2SigningEnabled=true} of type com.android.build.gradle.internal.dsl.SigningConfig

    原因:

    按照官网指示
    编辑~/.gradle/gradle.properties(没有这个文件你就创建一个),添加如下的代码(注意把其中的替换为相应密码)

    解决方法:

    gradle.properties文件应该使用RNProject/android/下面的gradle.properties
    也就是说在gradle.properties里面添加

    MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
    MYAPP_RELEASE_KEY_ALIAS=my-key-alias
    MYAPP_RELEASE_STORE_PASSWORD=*
    MYAPP_RELEASE_KEY_PASSWORD=*

    搞定

    Cannot find entry file index.android.js in any of the roots

    这里写图片描述
    出现如图错误,怎么弄都不行,index.android.js明明在根目录的,可是同事那边下的,在npm install后,拷贝过来又行了…

    然后想了想,我原来是用cnpm install安装的,可能是cnpm出了问题,果然重新用npm下了就好了

    unable to connect with remote debugger

    展开全文
  • Native】——关键字Native

    千次阅读 2018-11-08 14:42:15
    native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来...

    目录

    一、概念

    二、用法

     三、JNI 调用 C 流程图

     四、其他 


    一、概念

    native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。

    JNI是Java本机接口(Java Native Interface),是一个本机编程接口,它是Java软件开发工具箱(java Software Development Kit,SDK)的一部分。JNI允许Java代码使用以其他语言编写的代码和代码库。Invocation API(JNI的一部分)可以用来将Java虚拟机(JVM)嵌入到本机应用程序中,从而允许程序员从本机代码内部调用Java代码。

    二、用法

    1.编写带有native声明的方法的Java类(java文件)
    2.使用javac命令编译编写的Java类(class文件)
    3.使用javah -jni ****来生成后缀名为.h的头文件(.h的文件)
    4.使用其他语言(C、C++)实现本地方法
    5.将本地方法编写的文件生成动态链接库(dll文件)

     三、JNI 调用 C 流程图

    四、其他 

    1.native是与C++联合开发的时候用的!java自己开发不用

    2.使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。
    这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。 

    3.native 是用做java 和其他语言(如c++)进行协作时用的,也就是native 后的函数的实现不是用java写的 ,java只能调用。

     4.Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。
      可以将native方法比作Java程序同C程序的接口,其实现步骤:
      a、在Java中声明native()方法,然后编译;
      b、用javah产生一个.h文件;
      c、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
      d、将第三步的.cpp文件编译成动态链接库文件;
      e、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问

     5.Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。
      可以将native方法比作Java程序同C程序的接口,其实现步骤:
      a、在Java中声明native()方法,然后编译;
      b、用javah产生一个.h文件;
      c、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
      d、将第三步的.cpp文件编译成动态链接库文件;
      e、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。

    展开全文
  • H5、React NativeNative应用对比分析

    万次阅读 多人点赞 2016-06-24 01:09:37
    摘要 2015年是React Native发展的一年,2016年必定是React Native蓬勃的一年!2016年React Native很可能成为最为成功的开源技术之一。为什么React Native这么火呢?那么React Native相比H5、Native又有哪些优势呢?...
  • Android native memory leak detect (Android native泄露检测) 简介 Android应用中,经常会有业务需要使用到Native实现。比如加密,音视频播放等。也就是常见的二进制文件xxx.so 这部分代码,申请的内存不走...
  • React Native初级入门到项目实战

    万人学习 2016-10-13 13:52:46
    ReactNative是由Facebook公司发布的可以进行混合开发的开源技术框架。通过ReactNative可以为iOS和Android两个系统开发应用程序,“Learn once,write anywhere”。使用ReactNative开发,既拥有Native的良好人机交互...
  • React Native

    千次阅读 2016-07-08 16:17:54
    Facebook 在 React.js Conf 2015 大会上推出了基于 JavaScript 的开源框架 React Native, React Native 官网:http://facebook.github.io/react-native/ GitHub 地址:...
  • react-native 轮播图 ——react-native-swiper使用

    万次阅读 热门讨论 2017-05-23 23:02:31
    今天学习了轮播图的使用,上网查阅了一下,发现有react-native-swiper和React-Native-Viewpager 两种封装的比较好的第三方组件,对比了下文档,觉得react-native-swiper功能更加完善,而且文档说明比较全面,所以...
  • react-native-camera是一个非常好用的RN调用摄像头的第三方库,github地址: https://github.com/react-native-community/react-native-camera 使用的时候有几处坑,在这里记录一下开发过程,首先效果图: 使用时先...
  • React Native运行原理解析

    万次阅读 多人点赞 2016-09-22 15:54:18
    Facebook 于2015年9月15日推出react native for Android 版本, 加上2014年底已经开源的IOS版本,至此RN (react-native)真正成为跨平台的客户端框架。本篇主要是从分析代码入手,探讨一下RN在安卓平台上是如何构建...
  • Java的native方法

    万次阅读 多人点赞 2011-07-26 16:43:12
    第一篇:今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解。一. 什么是Native Method 简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native ...
  • ReactNative常用命令

    千次阅读 2020-10-13 14:22:07
    ReactNative 常用命令 创建项目 react-native init 项目名 查看是否有设备连接 adb devices 运行Android工程 react-native run-android 运行Ios工程 react-native run-ios 用指定设备运行Ios工程 react-...
  • react-native-zyCountDown 用于react-native的计数组件,倒计时组件 封装的一个倒计时按钮,仅仅使用TouchableOpacity,View和Text. 安装 npm i react-native-zycountdown 或者 yarn add react-native-...
  • ReactNative读取Native本地文件

    万次阅读 2016-10-17 20:23:43
    1, LatticeMockModule.java 声明一个Native模块给RN提供调用 /**此类为RN提供读取配置文件的功能*/ public class LatticeMockModule extends ReactContextBaseJavaModule { .... private final static String ...
  • [ReactNative入门到精通]React Native概述

    万次阅读 热门讨论 2015-10-11 01:15:10
    2015年9月15日,Facebook发布了 React Native for Android,把 Web 和原生平台的 JavaScript 开发技术扩展到了 Google 的流行移动平台。什么是React NativeReact Native 让开发者使用 JavaScript 和 React 编写应用...
  • victory-native 是不错的图表组件,支持很多种图表 地址: https://github.com/FormidableLabs/victory-native 先安装 react-native-svg: npm install react-native-svg --save react-native link react...
  • native关键字

    千次阅读 2017-09-25 17:23:51
    一直没有搞懂native的用法,今天看了好几位博主的文章,终于明白了。 参考:http://blog.csdn.net/xw13106209/article/details/6989415   概念: native是与C++联合开发的时候用的!使用native关键字说明这个方法是...
  • iOS React Native 混合开发集成React Native

    千次阅读 2017-07-24 17:47:51
     有时候我们并不是需要全部使用React Native,我们想和原生混合开发,那我们应该怎么办呢。 先看一下我集成完之后的项目目录: 首先安装React Native node组件  1、新建一个文件夹如目录中的RN,这个...
  • react-native-video 是一个播放视频的开源组件, 它的用法很简单。 1.安装 依次执行下面两个命令, npm i -S react-native-video react-native link (这一步是连接本地视频库) (1) ios: 如果您想允许其他应用...
  • 简述什么是 Cloud Native

    万次阅读 2019-03-04 22:29:04
    Cloud Native(云原生)是以云架构为优先的应用开发模式。目前,越来越多的企业已经在大规模开始拥抱云,在云环境开发应用、部署应用、发布应用。未来,越来越多的开发者也将采用 Cloud Native 来开发应用。本书是...
  • 以更新项目react-native0.56.0更新为react-native0.55.4版本为例 1 通过指令 进入项目目录,依次输入下列指令: react-native run-android //卸载react-native npm uninstall react-native //安装0.55.4版本的...
  • react-native-s-alipay React Native 支付宝模块,同时支持ios和android,react native 0.60.0+ autolink 安装 npm install react-native-s-alipay --save 或者 yarn add react-native-s-alipay 配置 如果你的...
  • NativeScript和React-native比较

    千次阅读 2015-11-24 17:35:53
    NativeScript和React不同,无法与原生项目融合,即你只能纯写个NativeScript的应用,不可能把它抽离出来作为某原生应用的一部分来出现。虽然说它和React的出发点一致都是"用Web APP的开发速度打造Native App的体验...
  • @click.native中 .native 的含义与使用

    千次阅读 2020-03-18 11:01:18
    vue 当中的 @click.native .native--侦听组件根元素上的原生事件 作用: 给组件绑定原生事件 @click是我们在vue开发中经常用到的事件绑定,而@实际上是 v-on 的简写,而 v-on 则是对 vue 的事件体系封装之后的 ...
  • 在之前的 《Flutter vs Native vs React-Native: Examining performance》 对比中有一个颇有争议的点,其中有人提出正常情况下我们是不会在 React Native 进行这些重复和复杂的计算,虽然在这种情况下,使用 Flutter
  • 在使用自定义UI组件时,定义JS组件报如下错误has no propType for native prop.If you haven't changed this prop yourself,this usually means that your versions of the native code andr JavaScript code are ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 764,192
精华内容 305,676
关键字:

native