native_nativejs - CSDN
native 订阅
native是一个计算机函数,一个Native Method就是一个Java调用非Java代码的接口。方法的实现由非Java语言实现,比如C或C++。 展开全文
native是一个计算机函数,一个Native Method就是一个Java调用非Java代码的接口。方法的实现由非Java语言实现,比如C或C++。
信息
中文名
原生方法
软    件
Java
外文名
native
类    型
计算机术语
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程序可以做任何应用层次的任务。
收起全文
  • 初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: 1 public native int hashCode(); 为什么有个native呢?这是我所要学习的地方。所以下面想要总结下native。 一、认识 native 即 JNI,Java ...

    初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法:

    1	public native int hashCode(); 

    为什么有个native呢?这是我所要学习的地方。所以下面想要总结下native。

    一、认识 native 即 JNI,Java Native Interface

    凡是一种语言,都希望是纯。比如解决某一个方案都喜欢就单单这个语言来写即可。Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Java本地接口)。

    image

    二、用 Java 调用 C 的“Hello,JNI”

    我们需要按照下班方便的步骤进行:

    1、创建一个Java类,里面包含着一个 native 的方法和加载库的方法 loadLibrary。HelloNative.java 代码如下:

    public class HelloNative
    
    {
    
      static
    
      {
    
        System.loadLibrary("HelloNative");
    
      }
    
        
      public static native void sayHello();
       
    
      @SuppressWarnings("static-access")
    
      public static void main(String[] args)
    
      {
    
        new HelloNative().sayHello();
    
      }
    
    }

    首先让大家注意的是native方法,那个加载库的到后面也起作用。native 关键字告诉编译器(其实是JVM)调用的是该方法在外部定义,这里指的是C。如果大家直接运行这个代码, JVM会告之:“A Java Exception has occurred.”控制台输出如下:

     

    1

    2

    3

    4

    5

    Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path

      at java.lang.ClassLoader.loadLibrary(Unknown Source)

      at java.lang.Runtime.loadLibrary0(Unknown Source)

      at java.lang.System.loadLibrary(Unknown Source)

      at HelloNative.<clinit>(HelloNative.java:5)

    这是程序使用它的时候,虚拟机说不知道如何找到sayHello。下面既可以手动写,自然泥瓦匠是用

    2、运行javah,得到包含该方法的C声明头文件.h

    将HelloNative.java ,简单地 javac javah,如图

    image

    就得到了下面的 HelloNative.h文件 

    /* DO NOT EDIT THIS FILE - it is machine generated */
    
    #include <jni.h>
    
    /* Header for class HelloNative */
    
      
    
    #ifndef _Included_HelloNative
    
    #define _Included_HelloNative
    
    #ifdef __cplusplus
    
    extern "C" {
    
    #endif
    
    /*
    
     * Class:   HelloNative
    
     * Method:  sayHello
    
     * Signature: ()V
    
     */
    
    JNIEXPORT void JNICALL Java_HelloNative_sayHello
    
     (JNIEnv *, jclass);
    
      
    
    #ifdef __cplusplus
    
    }
    
    #endif
    
    #endif

    jni.h 这个文件,在/%JAVA_HOME%include

    3、根据头文件,写C实现本地方法。

    这里我们简单地实现这个sayHello方法如下:

    #include "HelloNative.h"
    
    #include <stdio.h>
    
      
    JNIEXPORT void JNICALL Java_HelloNative_sayHello
    
    {
    
      printf("Hello,JNI"); 
    
    }

    4、生成dll共享库,然后Java程序load库,调用即可。

    在Windows上,MinGW GCC 运行如下

    1

    gcc -m64 -Wl,--add-stdcall-alias -I"C:\Program Files\Java\jdk1.7.0_71\include" -I"C:\Program Files\Java\jdk1.7.0_71\include\include\win32" -shared -o HelloNative.dll HelloNative.c

    -m64表示生成dll库是64位的。然后运行 HelloNative:

    1

    java HelloNative

    终于成功地可以看到控制台打印如下:

    1

    Hello,JNI

    三、JNI 调用 C 流程图

    四、其他介绍

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


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

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

    2。既然都不是java,那就别管它的源代码了,呵呵

    native的意思就是通知操作系统,
    这个函数你必须给我实现,因为我要使用。
    所以native关键字的函数都是操作系统实现的,java只能调用。

    java是跨平台的语言,既然是跨了平台,所付出的代价就是牺牲一些对底层的控制,而java要实现对底层的控制,就要一些其他语言的帮助,这个就是native的作用了

    Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。
      可以将native方法比作Java程序同C程序的接口,其实现步骤:
      

    1、在Java中声明native()方法,然后编译; 

    2、用javah产生一个.h文件; 

    3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件); 

    4、将第三步的.cpp文件编译成动态链接库文件; 

    5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。

    JAVA本地方法适用的情况

    1.为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA API访问

    2.为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库不是用JAVA编写的

    3.为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。

    展开全文
  • Java中native关键字

    2013-05-20 11:44:09
    今日在hibernate源代码中遇到了native关键词,甚是陌生,就查了点资料,对native是什么东西有了那么一点了解,并做一小记。 native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是...

    今日在hibernate源代码中遇到了native关键词,甚是陌生,就查了点资料,对native是什么东西有了那么一点了解,并做一小记。

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

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

    不过,对Java外部的调用通常不能移植到其他平台,在applet中还可能引发安全异常。实现本地代码将使您的Java应用程序无法通过100%纯Java测试。但是,如果必须执行本地调用,则要考虑几个准则:

    1.将您的所有本地方法都封装到一个类中,这个类调用单个的DLL。对每一种目标操作系统平台,都可以用特定于适当平台的版本的DLL。这样可以将本地代码的影响减少到最小,并有助于将以后所需要的移植问题考虑在内。

    2.本地方法尽量简单。尽量使您的本地方法对第三方(包括Microsoft)运行时DLL的依赖减少到最小。使您的本地方法尽量独立,以将加载您的DLL和应用程序所需的开销减少到最小。如果需要运行时DLL,必须随应用程序一起提供。

    JNI的书写步骤如下:

    a.编写带有native声明的方法的Java类

    b.使用javac命令编译编写的Java类

    c.使用java -jni ****来生成后缀名为.h的头文件

    d.使用其他语言(C、C++)实现本地方法

    e.将本地方法编写的文件生成动态链接库

    以下是一个在Java中调用本地C程序的简单的例子:

    a.编写HelloWorld.java类

    class HelloWorld{

    public native void hello();

    static{
    System.loadLibrary("hello");
    }

    public static void main(String[] args){

    new HelloWorld().hello();
    }

    }

    b.编译

    javac HelloWorld.java

    c.生成.h文件

    javah -jni HelloWorld

    生成内容如下:

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class HelloWorld */

    #ifndef _Included_HelloWorld
    #define _Included_HelloWorld
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
    * Class: HelloWorld
    * Method: hello
    * Signature: ()V
    */
    JNIEXPORT void JNICALL Java_HelloWorld_hello
    (JNIEnv *, jobject);

    #ifdef __cplusplus
    }
    #endif
    #endif

    第一个参数是调用JNI方法时使用的JNI Environment指针。第二个参数是指向在此Java代码中实例化的Java对象HelloWorld的一个句柄。其他参数是方法本身的参数

    d.c实现

    #include <jni.h>
    #include "HelloWorld.h"
    #include <stdio.h>
    JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){
    printf("Hello World!\n");
    return;
    }

    其中,第一行是将jni.h文件引入(在%JAVA_HOME%\include目录下),里边有JNIEnv和jobject的定义。

    e.编译c实现

    这里以在Windows中为例,需要生成dll文件。在保存HelloWorldImpl.c文件夹下面,使用VC的编译器cl成。

    cl -I%java_home%\include -I%java_home%\include\win32 -LD HelloWorldImp.c -Fehello.dll

    注意:生成的dll文件名在选项-Fe后面配置,这里是hello,因为在HelloWorld.java文件中我们loadLibary的时候使用的名字是hello。当然这里修改之后那里也需要修改。另外需要将-I%java_home%\include -I%java_home%\include\win32参数加上,因为在第四步里面编写本地方法的时候引入了jni.h文件。

    6) 运行程序

    java HelloWorld就ok了!

    例子是照着别人的网页做的,其他还有很多东西,可以看资源连接。

    资源:

    IBM网站的一篇文章:http://www.ibm.com/developerworks/cn/java/jnimthds/

    china itpub一篇文章:http://java.chinaitlab.com/JDK/36677.html

     http://java.chinaitlab.com/JDK/36678.html

    J2SE5的Java Native Interface Specification

     http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/jniTOC.html

    展开全文
  • 完全征服React Native

    2018-10-22 21:38:05
    React Native是Facebook于2015年推出的跨平台开发工具,可用于开发Android和iOS App,并且同时具有混合开发的优点(热更新,跨平台)以及本地App的性能。 本课程采用新的ES6开发,主要内容包括ReactNative的基础知识...
  • 移动端应用高速发展, 本教程便是使用ReactNative开发的高性能基于原生应用跨Android与iOS两大平台的大型综合App。 本实战项目使用react native 开发招聘,房产,点餐,商城,二手车,本地商务的大型综合门户性...
  • ReactNative是由Facebook公司发布的可以进行混合开发的开源技术框架。通过ReactNative可以为iOS和Android两个系统开发应用程序,“Learn once,write anywhere”。使用ReactNative开发,既拥有Native的良好人机交互...
  • native APP,hybrid APP和web APP三者的区别 随着智能手机的普及,移动端应用几乎成为每个互联网产品的标配。在快速迭代的互联网战场中高效开发、低成本上线产品,是每个应用开发团队追求的目标。此时,选择合适的...

    <1>native APP,hybrid APP和web APP三者的区别

    随着智能手机的普及,移动端应用几乎成为每个互联网产品的标配。在快速迭代的互联网战场中高效开发、低成本上线产品,是每个应用开发团队追求的目标。此时,选择合适的应用类型和开发模式便至关重要。移动应用可以粗分为三种:原生应用(native app), 网页应用(web app,或HTML5 app),以及它们的混血儿——混合模式移动应用(hybrid app)。今天的博文就来和大家简单聊聊近年来蓬勃发展的hybrid app。
     

    Source: http://s3.rainmaker-labs.com/wp-content/uploads/Mobile-hybrid-app1.jpg

    一、什么是Hybrid Mobile App

    Hybrid app从外观上来看是一个native app,实则只有一个UIWebView,里面访问的是一个web app,如新闻类和视频类的应用普遍采取该策略:native的框架加上web的内容。不同于native app需要针对不同的平台使用不同的开发语言(如使用Objective-C、Swift开发iOS应用,使用Java等开发Android应用,使用C#开发Windows Phone应用),hybrid app允许开发者仅使用一套网页语言代码(HTML5+CSS+JavaScript),即可开发能够在不同平台上部署的类原生应用 。由于hybrid app结合了native app良好用户交互体验和web app跨平台开发的优势,能够显著节省移动应用开发的时间和成本,hybrid app得到越来越多公司的青睐。
     

    Source: Native, HTML5, or Hybrid: Understanding Your Mobile Application Development Options

    按照网页语言和程序语言的混合,hybrid app通常可以分为三种类型:

    1. 多View混合型:native view和web view独立展示,交替出现。 其应用主体通常是native app,web技术作为补充。即在需要的时候,将web view作为独立的view运行,在web view内完成相关的展示操作。开发难度与native app相当。举个栗子:Instagram的timeline使用的是web view。
    2. 单View混合型:在同一个view内,native view和web view为层叠关系,同时出现。开发成本较高,难度较大,但是体验较好。举个栗子:百度搜索同时实现充分的灵活性和较好的用户体验。
    3. Web主体型:应用主体是web view,穿插native功能,主要以网页语言编写。整体开发难度低,基本可以实现跨平台;而用户体验好坏,主要取决于底层中间件的交互与跨平台能力。举个栗子:项目管理工具 Basecamp使用web view呈现内容,调用系统原生API实现界面导航等功能来提高用户体验。


    Hybrid app也并非是完美的解决方案。由于其使用HTML5,某些依赖于复杂的原生功能或者繁重的过渡动画的应用会出现卡顿;同时,为了模拟native app的UI和感官,需要投入额外的时间和精力;尽管可以跨平台,但是并不能完全支持所有的设备和操作系统;最后,如果应用的体验不够原生化,如一个简单的网站,则还有被Apple App Store拒绝的风险。

    二、 什么时候选择Hybrid App

    在hybrid app备受追捧的今天,我们也许会随大流优先考虑开发hybrid app。但是,每个产品各具特色,还没有哪一种解决方案可以完美地应万变。hybrid app的中庸让它大放异彩,也限制了它的应用场景 。在决定采用一种开发模式之前,有许多因素需要考虑,诸如:

    • 你希望针对哪个平台做开发?
    • 你希望通过应用商店发布应用么?
    • 你希望利用手机特有的性能么?
    • 你的团队技术能力如何?
    • 你的项目周期和预算是多少?


    如果要设计Angry Birds一类对图形要求很高的游戏,那么在暂不考虑技术团队能力的情况下,native app是最优选择;如果要设计如Yelp一类内容导向的应用,那么hybrid app会是很好的选择;如果项目时间紧张,没有足够的人手和资金,对图形和系统原生特性没有要求,那么web app将是性价比最高的解决方案。
    表一对比了native app, hybrid app和web app在不同方面的表现,可以帮助你根据实际情况选择最佳的解决方案。

    InfoQ上高嘉峻的一篇文章分享了几个hybrid app开发的误区,也是开发过程中应该尽量避免的:

    1. 为了HTML5而hybrid app:HTML5是HTML4.0.1和XHTML1.0的升级版,有更强大的表现功能,并加入了local storage等技术,为web页面提供了更大的想象空间和更多的可能性。但是,作为发展中的技术,HTML5收到浏览器兼容性和手机硬件水平的影响,能提供的功能和native app扔有一定的差距。开发应用时,首先是要满足用户需求,而不是追赶技术革新的大潮。所以开发应用时,应从应用本身功能和团队开发资源综合考量,决定是否采用hybrid app开发模式。
    2. 忽略关键因素:Web是基于PC的一种开发模式,而mobile app运行于移动端。通常,web开发者使用PC浏览器模拟app中的web view进行调试,而不是直接使用手机上的web view。 二者能支配的CPU资源,最大占有内存,运行网络环境,和鼠标/触控操作,浏览器对CSS/JS的解析和对事件的处理有着巨大的差别。而这些差别常常是web页面能否正常运行于app中的关键因素。
    3. 富交互导致体验差:这主要体现在两个方面:(1)web与手机平台默认交互习惯不一致:iOS和Android各有一套交互习惯,包括视觉风格,界面切换,操作习惯等。比如手机端系统风格是左右滑屏来进入或者退出界面,而旧界面保持状态;web则是默认无论加载还是后退,都会刷新旧界面,造成体验上的损失。如果模拟native的交互方式,那么会提高开发成本,却也难以达到native的流畅性。(2)与native相比同样的功能在性能上存在差距:Web界面上JS对HTML Node的操作需要消耗大量的CPU资源。首先,手机的CPU性能普遍低于PC端;其次,不同手机之间的硬件水平也参差不齐,比如在iPhone6s上可以流畅运行的界面,在iPhone5、MX5上可能就无法达到同样的流畅度。
    4. 跨平台:Hybrid app的优势之一是继承web跨平台的特性。然而,在智能手机软硬件版本众多的今天,兼容性是个不容忽视的问题。不同的安卓操作系统其浏览器内核对JS和CSS的解析、事件处理会有不同;iOS不同版本之间也存在较大差异。所以,在跨平台开发时,兼容性也是需要重点考虑的问题。
    5. 交互一致性:这里的一致性并非指同一应用在不同平台上的一致性体验,而是指在同一平台上,hybrid app和native平台的一致性。比如“返回”操作,在iOS平台上页面顶部留有一个44像素高的导航栏,左侧的返回按钮用于返回操作,可以通过绝对地址的方式链接到任何其它界面;而Android通常使用设备提供的返回键,返回上一个界面,如果自行配置平台返回按钮,那么它会和设备提供的返回键指向不同的位置。

     

    <2>区分三者

    nativeapp是一个原生程序,一般运行在机器操作系统上,有很强的交互,一般静态资源都是在本地的。浏览使用方便,体验度高。在实现上要么使用Objecttive-c和cocoaTouch Framework撰写iOS程序,要么选择java+Android Framework撰写android应用程序。

    hybridapp是一个半原生程序,伪造了一个浏览器的apk/ipa原生程序,把地址写死了,然后里面运行了一个webapp。里面是WebView UI 。但是还是运行在机器的操作系统上,交互较弱,资源一般在本地或者网络都可以。浏览体验度次之。

    webapp是生存在浏览器里的应用,所以只能运行在浏览器里,宿主是浏览器,不再是操作系统。资源一般都在网络上。说的根本点就是一个触屏版的网站

    什么叫做原生App?
    原生App是专门针对某一类移动设备而生的,它们都是被直接安装到设备里,而用户一般也是通过网络商店或者卖场来获取例如 The App Store 与 Android Apps on Google Play . 随便说几个原生App的例子,比如iOS 的 Camera+ 以及Android 的 KeePassDroid

    什么叫做移动Web App?
    一般说来,移动Web App都是都是需要用到网络的,它们利用设备上的浏览器(比如iPhone的Safari)来运行,而且它们不需要在设备上下载后安装。

    什么是混合app?
    Hybrid App是指介于web-app、native-app这两者之间的app,它虽然看上去是一个Native App,但只有一个UI WebView,里面访问的是一个Web App,比如街旁网最开始的应用就是包了个客户端的壳,其实里面是HTML5的网页,后来才推出真正的原生应用。再彻底一点的,如掌上百度和淘宝客户端Android版,走的也是Hybrid App的路线,不过掌上百度里面封装的不是WebView,而是自己的浏览内核,所以体验上更像客户端,更高效。
    综合一下就是:“Hybrid App同时使用网页语言与程序语言开发,通过应用商店区分移动操作系统分发,用户需要安装使用的移动应用”。总体特性更接近Native App但是和Web App区别较大。只是因为同时使用了网页语言编码,所以开发成本和难度比Native App要小很多。因此说,Hybrid App兼具了Native App的所有优势,也兼具了Web App使用HTML5跨平台开发低成本的优势。

    Web App是指基于Web的系统和应用,运行在高端手机的网络和浏览器上,用网页技术开发实现特定功能的应用,对手机性能要求比较高。

    Native App(原生开发):目前较为成熟,各大公司均采用此方式。但是其人工成本较高,同一个项目,至少需要Android端、iOS端、Web端三个开发团队。

    Hybrid App(混合开发),基于第三方跨平台移动应用引擎框架进行开发。使用HTML5和JS作为开发,调用引擎封装的底层功能如照相机、传感器、通讯录等。

    拿酒来形象化这三种模式的话:

    Web App就像白酒那样浑厚甘醇,度数高,但不适合任何人的口味,制造成本低,

    Native App就是葡萄酒,分红白类型,对葡萄品质要求高,口味大众化,比较成熟,

    Hybrid App就是鸡尾酒,混合了多种酒的优势,非常适合跨平台,是以后的一个App开发趋势。

     

    <3>区分native APP ,web APP,hybrid APP

    1、Native App

    Native App是一种基于智能手机本地操作系统如iOS、Android、WP并使用原生程式编写运行的第三方应用程序,也叫本地app。一般使用的开发语言为JAVA、C++、Objective-C。
    想创建Native App,开发者必须编写源代码,使用由操作系统开发商提供的工具,对源代码进行编译。代码编译之后以2进制或者字节码的形式运行在操作系统上,直接调用操作系统的Device API。
    虽然不同操作系统上进行的开发过程常常很相似,但是每一种移动操作系统都随带各自的独特工具。平台之间的这些区别导致了Native开发方法的最重大缺点之一:为一种移动平台编写的代码无法在另一种平台上使用。Native App的优缺点总结如下:
    优点

    1、提供最佳的用户体验,最优质的用户界面,最华丽的交互
    2、针对不同平台提供不同体验
    3、下载到本地,可节省带宽成本
    4、可访问本地资源
    5、直接访问系统级API
    6、操作速度更快
    7、用户留存率高

    缺点

    1、移植到不同平台上比较麻烦
    2、需要维护多个版本
    3、发布新版本需要通过store或market的确认
    4、盈利需要与第三方分成
    5、开发的成本比较大,需要针对不同平台开发相应的版本
    6、更新体验较差、同时也比较麻烦(每一次发布新的版本,都需要做版本打包,且需要用户手动更新,或一个让用户反感的提示)。

    2、Web App

    Web App是运行于网络和标准浏览器上,以HTML+JS+CSS等WEB技术开发实现特定功能的应用。通过浏览器来调用Device API,但是只有数量有限的这些API向浏览器里面运行的Web App公开。基于当下开始普及流行的HTML5,Web App可以实现很多原本Native App才可以实现的功能,,比如LBS的功能、本地数据存储、音视频播放的功能,甚至还有调用照相机和结合GPU的硬件加速功能。
    由于它不依赖于操作系统,因此开发了一款Web App后,基本能应用于各种系统平台。并且还有版本升级容易的优势(毕竟服务器是受自己控制的)。但是这种方案的缺点也很明显——无法使用系统级API,只能做为一个临时的入口,用户很难留存。Web App的优缺点总结如下:
    优点

    (1)开发成本低;
    (2)更新快;
    (3)更新无需通知用户,不需要手动升级;
    (4)能够跨多个平台和终端;
    (5)维护比较简单。

    缺点

    (1)临时性的入口;
    (2)无法获取系统级别的通知,提醒,动效等等;
    (3)用户留存率低;
    (4)需要依赖网络,体验较差。

    3、Hybrid App

    Hybrid App是一种用Native技术来搭建App的外壳,壳里的内容由Web技术来提供的移动应用,兼具“Native App良好交互体验的优势”和“Web App跨平台开发的优势”。
    根据实现的不同,可以细分为两种实现方案:
    (1)在Native App中使用WebView加载远端Web资源

    这种方案的Web资源放置在服务器上,开发者不必经历提交和批准过程——有些App商店要求这个过程,就可以对App进行小幅更新。遗憾的是,这个方法摈弃了任何离线可用性,因为设备与网络没有连接时,无法访问设备。

    (2)将一组HTML、JavaScript、CSS和媒体文件,封装到App代码中,存储在设备本地,使用Cordova/PhoneGap等框架通过WebView加载本地资源进行页面渲染

    把Web代码封装到App里面在一定程度上缓解从远端加载静态资源导致UI展示延迟的问题,可以提高性能和可访问性,并且还可以通过桥接Native和Web来调用一些Device的API。
    但是其劣势也很明显,一是不允许远程更新;二是安装包变大;三是如果想调用相关平台的API,需要针对平台单独进行开发,如果在应用中用到了大量的Device API,那么开发的效率将大大降低。

    Hybrid App同时使用网页语言与程序语言开发,但其总体特性更接近Native App。只是因为同时使用了web语言编码,所以开发成本和难度比Native App要小很多。因此,Hybrid App兼具了Native App的优势,也兼具了Web App使用HTML5跨平台开发低成本的优势。

    三种App之间的比较

    特征 Native App Web App Hybrid App
    适用场景 (1)偏操作互动多的工具类应用; </br>(2)需要访问特定的原生API;</br>(3)对速度要求较高。 (1)作为对非核心业务在移动端的入口补足;</br>(2)作为用户轻量、低频使用的体验增强;</br>(3)作为吸引用户安装Native App的引导页。 (1)Native App中提到的适用场景;</br>(2)需要频繁小幅度更新。
    开发语言 只用native开发语言 native和web开发语言 只用web开发语言
    开发成本
    维护更新 复杂 简单 介于二者之间
    体验
    安装 需要 不需要 需要
    升级灵活性 低</br>总通过应用商店来升级 中</br>web部分的升级不需要通过应用商店来完成
    资源存储 本地 服务器 本地和服务器

     

    参考文献:

    1. 闫晓芬, 郭银章. 基于移动Agent与P/S混合模式的分布对象中间件异步通信研究[J]. 计算机工程与设计, 2008, (24).
    2. WebAPP与Native APP到底有什么区别
    3. http://www.uisdc.com/web-hybrid-native-app
    4. http://blog.jobbole.com/87834/?utm_source=blog.jobbole.com&utm_medium=relatedPosts
    5. http://blog.jobbole.com/95641/?utm_source=blog.jobbole.com&utm_medium=relatedPosts
    6. http://blog.jobbole.com/106157/?utm_source=blog.jobbole.com&utm_medium=relatedPosts


    <4>选择哪个做项目比较合适

     当前的APP开发模式注意有以下四大类型:

    • Native App

      即传统的原生APP开发模式,Android基于Java语言,底层调用Google的 API;iOS基于OC或者Swift语言,底层调用App官方提供的API。体验最后。

    • Web App

      即移动端的网站,将页面部署在服务器上,然后用户使用各大浏览器访问。一般泛指 SPA(Single Page Application)模式开发出的网站。体验最差。

    • Hybrid App

      即混合开发,由Native通过JSBridge等方法提供统一的API,然后用Html5+JS来写实际的逻辑,调用API,这种模式下,由于Android,iOS的API一般有一致性,而且最终的页面也是在webview中显示,所有有跨平台效果

    • React Native App

      Facebook发起的开源的一套新的APP开发方案,使用JS+部分原生语法来实现功能。初次学习成本较高,但是在入门后,经过良好的封装也能够实现大部分的跨平台。而且体验很好。

         脑图地址: 

         http://naotu.baidu.com/file/1eb556f3380e8189be859348527ec518?token=a5a049eb4c618e70

    Native App

          即原生开发模式,开发出来的是原生程序,不同平台上,Android和iOS的开发方法不同,开发出来的是一个独立的APP,能发布应用商店,有如下优点和缺点。

    优点

    • 直接依托于操作系统,交互性最强,性能最好

      相比于其它模式的交互,原生APP体验是最优的

    • 功能最为强大,特别是在与系统交互中,几乎所有功能都能实现

      得益于原生是直接依托于系统的,所以可以直接调用官方提供的api,功能最为全面(比如本地资源操作,通知,动画等)

    缺点

    • 开发成本高,无法跨平台,不同平台Android和iOS上都要各自独立开发

      Android上基于Java开发,iOS上基于OC或Swift开发,相互之间独立,必须要有各自的开发人员

    • 门槛较高,原生人员有一定的入门门槛,相比广大的前端人员而言,较少

      原生的一个很大特点就是独立,所以不太容易入门,不像web前端一样那么广泛,而且Android,iOS都需要独立学习

    • 更新缓慢,特别是发布应用商店后,需要等到审核周期

      原生应用更新是一个很大的问题,Android中还能直接下载整包APK进行更新,但是iOS中,如果是发布AppStore,必须通过AppStore地址更新,而每次更新都需要审核,所以无法达到及时更新

    • 维护成本高

      同开发一样,项目上线后,维护起来也很为麻烦

    Web App

         即移动端的网站,将页面部署在服务器上,然后用户使用各大浏览器访问,不是独立APP,无法安装和发布Web网站一般分两种,MPA(Multi-page Application)和SPA(Single-page Application)。而Web App一般泛指后面的SPA形式开发出的网站(因为可以模仿一些APP的特性),有如下优点和缺点。

    优点

    • 开发成本低,可以跨平台,调试方便

      web app一般只需要一个前端人员开发出一套代码,然后即可应用于各大主流浏览器(特殊情况可以代码进行下兼容),没有新的学习成本,而且可以直接在浏览器中调试

    • 维护成本低

      同上,如果代码合理,只需要一名前端就可以维护多个web app

    • 更新最为快速

      由于web app资源是直接部署在服务器端的,所以只需要替换服务器端的文件,用户访问是就已经更新了(当然需要解决一些缓存问题)

    • 无需安装App,不会占用手机内存

      通过浏览器即可访问,无需安装,用户就会比较愿意去用

    缺点

    • 性能低,用户体验差

      由于是直接通过的浏览器访问,所以无法使用原生的API,操作体验不好

    • 依赖于网络,页面访问速度慢,耗费流量

      Web App每次访问都需要去服务端加载资源访问,所以必须依赖于网络,而且网速慢时访问速度很不理想,特别是在移动端,如果网站优化不好会无故消耗大量流量

    • 功能受限,大量功能无法实现

      只能使用Html5的一些特殊api,无法调用原生API,所以很多功能存在无法实现情况

    • 临时性入口,用户留存率低

      这既是它的优点,也是缺点,优点是无需安装,确定是用完后有时候很难再找到,或者说很难专门为某个web app留存一个入口,导致用户很难再次使用

    Hybrid App

         即混合开发,也就是半原生半Web的开发模式,有跨平台效果,当然了,实质最终发布的仍然是独立的原生APP(各种的平台有各种的SDK),有如下优点和缺点。

    优点

    • 开发成本较低,可以跨平台,调试方便

      Hybrid模式下,由原生提供统一的API给JS调用,实际的主要逻辑有Html和JS来完成,而由于最终是放在webview中显示的,所以只需要写一套代码即可,达到跨平台效果,另外也可以直接在浏览器中调试,很为方便

      最重要的是只需要一个前端人员稍微学习下JS api的调用即可,无需两个独立的原生人员

      一般Hybrid中的跨平台最少可以跨三个平台:Android App,iOS App,普通webkit浏览器

    • 维护成本低,功能可复用

      同上,如果代码合理,只需要一名前端就可以维护多个app,而且很多功能还可以互相复用

    • 更新较为自由

      虽然没有web app更新那么快速,但是Hybrid中也可以通过原生提供api,进行资源主动下载,达到只更新资源文件,不更新apk(ipa)的效果

    • 针对新手友好,学习成本较低

      这种开发模式下,只需要前端人员关注一些原生提供的API,具体的实现无需关心,没有新的学习内容,只需要前端人员即可开发

    • 功能更加完善,性能和体验要比起web app好太多

      因为可以调用原生api,所以很多功能只要原生提供出就可以实现,另外性能也比较接近原生了

    • 部分性能要求的页面可用原生实现

      这应该是Hybrid模式的最多一个好处了,因为这种模式是原生混合web,所以我们完全可以将交互强,性能要求高的页面用原生写,然后一些其它页面用JS写,嵌入webview中,达到最佳体验

    缺点

    • 相比原生,性能仍然有较大损耗

      这种模式受限于webview的性能桎梏,相比原生而言有不少损耗,体验无法和原生相比

    • 不适用于交互性较强的app

      这种模式的主要应用是:一些新闻阅读类,信息展示类的app;但是不适用于一些交互较强或者性能要求较高的app(比如动画较多就不适合)

    React Native App

          Facebook发起的开源的一套新的APP开发方案,Facebook在当初深入研究Hybrid开发后,觉得这种模式有先天的缺陷,所以果断放弃,转而自行研究,后来推出了自己的“React Native”方案,不同于H5,也不同于原生,更像是用JS写出原生应用,有如下优点和缺点,其实很多大公司都已经转React Native开发了,已经很成熟了。

    优点

    • 虽然说开发成本大于Hybrid模式,但是小于原生模式,大部分代码可复用

      相比于原生模式,这种模式是统一用JS写代码,所以往往只需要一名成员投入学习,即可完成跨平台app的开发,而且后续代码封装的好,很多功能可复用

    • 性能体验高于Hybrid,不逊色与原生

      这种模式和Hybrid不一样,Hybrid中的view层实际上还是dom,但是这种模式的view层是虚拟dom,所以性能要高于Hybrid,距离原生差距不大

      这种模式可以认为是用JS写原生,即页面用JS写,然后原生通过Bridge技术分析JS,将JS内容单独渲染成原生Android和iOS,所以也就是为什么性能不逊色原生

    • 开发人员单一技术栈,一次学习,跨平台开发

      这种模式是统一由JS编写,有着独特的语法,所以只需要学习一次,即可同时开发Android和iOS

    • 社区繁荣,遇到问题容易解决

      这应该是React Native的很大一个优势,不像Hybrid模式和原生模式一样各自为营,这种模式是Facebook统一发起的,所以有一个统一的社区,里面有大量资源和活跃的人员,对开发者很友好

    缺点

    • 虽然可以部分跨平台,但并不是Hybrid中的一次编写,两次运行那种,而是不同平台代码有所区别

      这种模式实际上还是JS来写原生,所以Android和iOS中的原生代码会有所区别,如果需要跨平台,对开发人员有一定要求

      当然了,如果发展了有一定时间,组件库够丰富了,那么其实影响也就不大了,甚至会比Hybrid更快

    • 开发人员学习有一定成本

      虽然社区已经比较成熟了,但是一个新的普通前端学习起来还是有一定学习成本的,无法像Hybrid模式一样平滑

    分析

    各大开发模式直观对比

          以下是各大模式的直观对比分析

      Native App Web App Hybrid App React Native App
    原生功能体验 优秀 良好 接近优秀
    渲染性能 非常快 接近快
    是否支持设备底层访问 支持 不支持 支持 支持
    网络要求 支持离线 依赖网络 支持离线(资源存本地情况) 支持离线
    更新复杂度 高(几乎总是通过应用商店更新) 低(服务器端直接更新) 较低(可以进行资源包更新) 较低(可以进行资源包更新)
    编程语言 Android(Java),iOS(OC/Swift) js+html+css3 js+html+css3 主要使用JS编写,语法规则JSX
    社区资源 丰富(Android,iOS单独学习) 丰富(大量前端资源) 有局限(不同的Hybrid相互独立) 丰富(统一的活跃社区)
    上手难度 难(不同平台需要单独学习) 简单(写一次,支持不同平台访问) 简单(写一次,运行任何平台) 中等(学习一次,写任何平台)
    开发周期 较短 中等
    开发成本 昂贵 便宜 较为便宜 中等
    跨平台 不跨平台 所有H5浏览器 Android,iOS,h5浏览器 Android,iOS
    APP发布 App Store Web服务器 App Store App Store

    如何选择开发模式

         目前有多种开发模式,那么我们平时开发时如何选择用哪种模式呢?如下

    选择纯Native App模式的情况

    • 性能要求极高,体验要求极好,不追求开发效率

      一般属于吹毛求疵的那种级别了,因为正常来说如果要求不是特别高,会有Hybrid

    选择Web App模式的情况

    • 不追求用户体验和性能,对离线访问没要求

      正常来说,如果追求性能和体验,都不会选用web app

    • 没有额外功能,只有一些信息展示

      因为web有限制,很多功能都无法实现,所以有额外功能就只能弃用这种方案了

    选择Hybrid App模式的情况

    • 大部分情况下的App都推荐采用这种模式

      这种模式可以用原生来实现要求高的界面,对于一些比较通用型,展示型的页面完全可以用web来实现,达到跨平台效果,提升效率

      当然了,一般好一点的Hybrid方案,都会把资源放在本地的,可以减少网络流量消耗

    选择React Native App模式的情况

    • 追求性能,体验,同时追求开发效率,而且有一定的技术资本,舍得前期投入

      React Native这种模式学习成本较高,所以需要前期投入不少时间才能达到较好水平,但是有了一定水准后,开发起来它的优势就体现出来了,性能不逊色原生,而且开发速度也很快

    另类的app方案

          除了以上的几种常见app开发模式,其实还有一些其它的类似方案

    微网页

          比如在进行微信网页开发时,可以调用一些微信的特殊api,这其实就是算是微信的Hybrid模式,实质上仍然是在浏览器中(只不过是腾讯的X5内核)

          当然了,微信在这方面做了很多限制,比如权限认证等等,所以导致开发起来效果不是很完美。这里不再赘述其功能

    微信小程序

          微信小程序是微信新推出的一种新的app方案,2016年9月开始进行内测,2016年11月准备全面面向开发者需要注意的是,这种模式是“反HTML5”的,相当于是微信提供的一套封闭开发模式,有自己的语法和IDE,有的类似于iOS开发的感觉。具体也不赘述,请参考引用来源中的文章

    参考资料

     

    展开全文
  • Java的native关键字

    2008-10-14 21:00:00
    今天研究Java基础类库,Object类的时候,发现了一个关键字:native咦?这是个什么东东?它认识我,我可不认识它!嘿嘿,没关系,baidu一下。 java native关键字 一. 什么是Native Method 简单地讲,一个Native ...

     

    今天研究Java基础类库,Object类的时候,发现了一个关键字:native

    咦?这是个什么东东?它认识我,我可不认识它!

    嘿嘿,没关系,baidu一下。

     

    java native关键字

     一. 什么是Native Method
       简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。
       "A native method is a Java method whose implementation is provided by non-java code."
       在定义一个native method时,并不提供实现体(有些像定义一个java interface),因为其实现体是由非java语言在外面实现的。,下面给了一个示例:   

    1. package java.lang; 
    2. public class Object { 
    3.     ......
    4.     public final native Class<?> getClass(); 
    5.     public native int hashCode(); 
    6.     protected native Object clone() throws CloneNotSupportedException; 
    7.     public final native void notify(); 
    8.     public final native void notifyAll(); 
    9.     public final native void wait(long timeout) throws InterruptedException; 
    10.     ......

            标识符native可以与所有其它的java标识符连用,但是abstract除外。这是合理的,因为native暗示这些方法是有实现体的,只不过这些实现体是非java的,但是abstract却显然的指明这些方法无实现体。native与其它java标识符连用时,其意义同非Native Method并无差别。

        一个native method方法可以返回任何java类型,包括非基本类型,而且同样可以进行异常控制。这些方法的实现体可以自制一个异常并且将其抛出,这一点与java的方法非常相似。
        native method的存在并不会对其他类调用这些本地方法产生任何影响,实际上调用这些方法的其他类甚至不知道它所调用的是一个本地方法。JVM将控制调用本地方法的所有细节。

        如果一个含有本地方法的类被继承,子类会继承这个本地方法并且可以用java语言重写这个方法(这个似乎看起来有些奇怪),同样的如果一个本地方法被fianl标识,它被继承后不能被重写。
       本地方法非常有用,因为它有效地扩充了jvm.事实上,我们所写的java代码已经用到了本地方法,在sun的java的并发(多线程)的机制实现中,许多与操作系统的接触点都用到了本地方法,这使得java程序能够超越java运行时的界限。有了本地方法,java程序可以做任何应用层次的任务。


    二.为什么要使用Native Method
       java使用起来非常方便,然而有些层次的任务用java实现起来不容易,或者我们对程序的效率很在意时,问题就来了。
       与java环境外交互:
       有时java应用需要与java外面的环境交互。这是本地方法存在的主要原因,你可以想想java需要与一些底层系统如操作系统或某些硬件交换信息时的情况。本地方法正是这样一种交流机制:它为我们提供了一个非常简洁的接口,而且我们无需去了解java应用之外的繁琐的细节。
       与操作系统交互:
       JVM支持着java语言本身和运行时库,它是java程序赖以生存的平台,它由一个解释器(解释字节码)和一些连接到本地代码的库组成。然而不管怎样,它毕竟不是一个完整的系统,它经常依赖于一些底层(underneath在下面的)系统的支持。这些底层系统常常是强大的操作系统。通过使用本地方法,我们得以用java实现了jre的与底层系统的交互,甚至JVM的一些部分就是用C写的,还有,如果我们要使用一些java语言本身没有提供封装的操作系统的特性时,我们也需要使用本地方法。
        Sun's Java
        Sun的解释器是用C实现的,这使得它能像一些普通的C一样与外部交互。jre大部分是用java实现的,它也通过一些本地方法与外界交互。例如:类java.lang.Thread 的 setPriority()方法是用java实现的,但是它实现调用的是该类里的本地方法setPriority0()。这个本地方法是用C实现的,并被植入JVM内部,在Windows 95的平台上,这个本地方法最终将调用Win32 SetPriority() API。这是一个本地方法的具体实现由JVM直接提供,更多的情况是本地方法由外部的动态链接库(external dynamic link library)提供,然后被JVM调用。


    三.JVM怎样使Native Method跑起来:
        我们知道,当一个类第一次被使用到时,这个类的字节码会被加载到内存,并且只会回载一次。在这个被加载的字节码的入口维持着一个该类所有方法描述符的list,这些方法描述符包含这样一些信息:方法代码存于何处,它有哪些参数,方法的描述符(public之类)等等。
        如果一个方法描述符内有native,这个描述符块将有一个指向该方法的实现的指针。这些实现在一些DLL文件内,但是它们会被操作系统加载到java程序的地址空间。当一个带有本地方法的类被加载时,其相关的DLL并未被加载,因此指向方法实现的指针并不会被设置。当本地方法被调用之前,这些DLL才会被加载,这是通过调用java.system.loadLibrary()实现的。
     
       最后需要提示的是,使用本地方法是有开销的,它丧失了java的很多好处。如果别无选择,我们可以选择使用本地方法。

     

    可以将native方法比作Java程序同C程序的接口,其实现步骤:
    1、在Java中声明native()方法,然后编译;
    2、用javah产生一个.h文件;
    3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
    4、将第三步的.cpp文件编译成动态链接库文件;
    5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。

     

    具体实现方法可以从网上查找,这里就不写了

    不过,又引出两个东西:javah.exe命令和JNI

     

    自己写了一个调用VB的DLL的例子,不过还没写完,调用函数部分不会写,只写了加载DLL的过程

    JAVA部分:

    1. public class TestNativeMothod {
    2.     public static void main(String[] args) {
    3.         
    4.         //PROCESS LOGIC
    5.         
    6.     }
    7.     
    8.     public native String callNativeMothod();
    9.     
    10.     static { 
    11.         System.loadLibrary("TestNativeMethodProj");
    12.     }
    13. }

    VB部分:

    1. Option Explicit
    2. Public Function callNativeMothod() As String
    3.     callNativeMothod = "This is a method implemented by VB"
    4. End Function


    展开全文
  • vue 事件中的 .native

    2017-12-25 10:35:32
    .native是什么?.native - 监听组件根元素的原生事件。 主要是给自定义的组件添加原生事件。例子 给普通的标签加事件,然后加native是无效的<!DOCTYPE html> <title>Document <div

    .native是什么?

    .native - 监听组件根元素的原生事件。
    主要是给自定义的组件添加原生事件。

    例子
    给普通的标签加事件,然后加native是无效的

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <div id="app">
            <button @click.native="clickFn">按钮</button>
        </div>
    <script src='vue.js'></script>
    <script>
    
    
        new Vue({
            el:'#app',
            data:{
            },
            methods:{
                clickFn () {
                  console.log('点击按钮了')
              }
            }
        })
    
    </script>
    </body>
    </html>

    onclick事件不会触发!

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <div id="app">
            <card @click.native="clickFn">按钮</card>
        </div>
    <script src='vue.js'></script>
    <script>
    
        Vue.component('card',{
            template:'<p>这是card组件<button>按钮</button></p>'
        })
    
        new Vue({
            el:'#app',
            data:{
                state:false
            },
            methods:{
                clickFn (e) {
                  console.log(e)  //打印出MouseEvent对象
                  if (e.target.nodeName === 'IMG') {  // 可以对点击的target标签进行判断
                    this.dialogImageUrl = file.target.src
                    this.dialogVisible = true
                  }
              }
            }
        })
    
    </script>
    </body>
    </html>

    总结: .native - 主要是给自定义的组件添加原生事件。

    展开全文
  • Java的native方法

    2018-06-26 14:33:42
    第一篇:今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解。一. 什么是Native Method 简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native ...
  • 目录结构:关于native关键字使用native关键字使用步骤案例编写.java文件编译.java文件获得.h文件编写hello.cpp文件部署hello.dll文件运行HelloWorld.class文件参考文章1,关于native关键字想必读者已经了解过native...
  • vue @click.native

    2018-07-05 10:41:26
    1,给vue组件绑定事件时候,必须加上native ,不然不会生效(监听根元素的原生事件,使用 .native 修饰符)2,等同于在自组件中: 子组件内部处理click事件然后向外发送click事件:$emit("click".fn).....
  • Native发展的一年,2016年必定是React Native蓬勃的一年!2016年React Native很可能成为最为成功的开源技术之一。为什么React Native这么火呢?那么React Native相比H5、Native又有哪些优势呢?使用React Native的...
  • The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:XXXX出现原因分析:Tomcat建议使用apache的apr,来更好的运行...
  • Native.js概述

    2016-07-07 17:41:37
    Native.js技术,简称NJS,是一种将手机操作系统的原生对象转义,映射为JS对象,在JS里编写原生代码的技术。如果说Node.js把js扩展到服务器世界,那么Native.js则把js扩展到手机App的原生世界。HTML/JS/Css全部语法...
  • react-native技术的优劣

    2018-02-27 23:35:18
    从2017年初开始到现在,使用React-Native做项目已经一年了。我们做的是一款IM软件,嵌入在一个手机游戏平台的工程内部。之所以要采用react-native(后文简称RN)框架重构它,是因为现在游戏大厅上的所有游戏都是热...
  • (一)前言 前几节课程我们对于React Native的一些基础配置,开发工具以及调试,Android项目移植做了相关讲解,今天一起来学习一下另外一个比较重要的知识点,就是React Native项目签名打包。 刚创建的React Native...
  • 用缺省的32位native库(/opt/hadoop-2.6.0/lib/native)会出现下面的错误: 14/01/27 10:52:34 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes ...
  • 最近做了两个React Native(以后简称RN)的项目,重新Review一下相关的项目代码,期望下次使用的时候可以有更好的结构,更好的规范和约束已帮助大家减少bug,提高开发效率; ​ 在做了一些原生Android开发,iOS开发和基于...
  • native2ascii命令详解

    2018-02-07 14:10:45
    1、native2ascii简介: native2ascii是sun java sdk提供的一个工具。用来将别的文本类文件(比如.txt,.ini,.properties,.java等等)编码转为Unicode编码。为什么要进行转码,原因在于程序的国际化。Unicode编码的...
  • 前言: 完成项目时,我们需要将项目打包成一个apk,方便测试以及发布...离线包就是把 ReactNative 和你写的 js文件、图片等资源都打包放入 App ,不需要走网络下载。 首先看一下官方给的参数(中文版): react-native...
1 2 3 4 5 ... 20
收藏数 573,177
精华内容 229,270
关键字:

native