jni 订阅
JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。 [1]  从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少要保证本地代码能工作在任何Java 虚拟机环境。 展开全文
JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。 [1]  从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少要保证本地代码能工作在任何Java 虚拟机环境。
信息
简    写
JNI
外文名
Java Native Interface
编程语言
Java
中文名
Java本地接口
学    科
Java和本地代码间的双向交互
目    的
使用 Java 本地接口书写程序
JNI简介
SUN公司发布的Java 本地接口(JNI)提供了将Java与C/C++、汇编等本地代码集成的方案,该规范使得在 Java 虚拟机内运行的 Java 代码能够与其它编程语言互相操作,包括创建本地方法、更新Java对象、调用Java方法,引用 Java类,捕捉和抛出异常等,也允许 Java代码调用 C/C++或汇编语言编写的程序和库。作为一个标准程序接口,它没有对底层 Java虚拟机的实现施加任何限制,并具有以下特点:二进制兼容。本地方法库与同一平台上所有Java 虚拟机之间实现二进制兼容,即对于给定平台开发人员只需要维护一种版本的本地方法库。效率高。为了实现实时系统,JNI 在效率与虚拟机无关性之间进行了优化,以保障高效运行。功能强。JNI 提供了大量的函数及接口让本地方法与Java 虚拟机内核相互操作,增强两者的功能。本地代码与 Java 虚拟机之间是通过 JNI 函数实现相互操作的。JNI 函数通过接口指针来获得,本地方法将 JNI 接口指针当作参数来接受。虚拟机保证在从相同的 Java 线程中对本地方法进行多次调用时,传递给本地方法的接口指针是相同的,本地方法被不同的 Java 线程调用时,它接受不同的 JNI接口指针。 [2] 
收起全文
精华内容
参与话题
问答
  • android jni ndk dlopen

    千次阅读 2012-12-11 16:23:10
    dlopen()  功能:打开一个动态链接库  包含头文件:  #include  函数定义:  void * dlopen( constchar * ... 在dlopen的()函数以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程。...

    dlopen()

      功能:打开一个动态链接库

      包含头文件:

      #include<dlfcn.h>

      函数定义

      void * dlopen( constchar * pathname, intmode );

     

      函数描述:

      在dlopen的()函数以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程。使用dlclose()来卸载打开的库。

     

     mode是打开方式,其值有多个,不同操作系统上实现的功能有所不同,在linux下,按功能可分为三类:       

           1、解析方式

            RTLD_LAZY:在dlopen返回前,对于动态库中的未定义的符号不执行解析(只对函数引用有效,对于变量引用总是立即解析)。
           RTLD_NOW: 需要在dlopen返回前,解析出所有未定义符号,如果解析不出来,在dlopen会返回NULL,错误为::undefined symbol: xxxx.......

           2、作用范围,可与解析方式通过“|”组合使用。 
           RTLD_GLOBAL:动态库中定义的符号可被其后打开的其它库重定位。 
           RTLD_LOCAL:与RTLD_GLOBAL作用相反,动态库中定义的符号不能被其后打开的其它库重定位。如果没有指明是RTLD_GLOBAL还是RTLD_LOCAL,则缺省为RTLD_LOCAL。

           3、作用方式

           RTLD_NODELETE:在dlclose()期间不卸载库,并且在以后使用dlopen()重新加载库时不初始化库中的静态变量。这个flag不是POSIX-2001标准。 
           RTLD_NOLOAD:不加载库。可用于测试库是否已加载(dlopen()返回NULL说明未加载,否则说明已加载),也可用于改变已加载库的flag,如:先前加载库的flag为RTLD_LOCAL,用dlopen(RTLD_NOLOAD|RTLD_GLOBAL)后flag将变成RTLD_GLOBAL。这个flag不是POSIX-2001标准。
           RTLD_DEEPBIND:在搜索全局符号前先搜索库内的符号,避免同名符号的冲突。这个flag不是POSIX-2001标准。

     

      返回值:

      打开错误返回NULL

      成功,返回库引用

      编译时候要加入-ldl(指定dl)

      例如

      gcc test.c -o test-ldl

     

    展开全文
  • 对于JNINDK很多Android开发初学者没有搞明白这个问题,JNI是Java调用Native机制,是Java语言自己的特性全称为Java Native Interface,类似的还有微软.Net Framework上的p/invoke,可以让C#或Visual Basic.Net可以...

    JNI NDK 简单说明
    

    对于JNI和NDK很多Android开发初学者没有搞明白这个问题,JNI是Java调用Native机制,是Java语言自己的特性全称为Java Native Interface,类似的还有微软.Net Framework上的p/invoke,可以让C#或Visual Basic.Net可以调用C/C++的API,所以说JNI和Android没有关系,在PC上开发Java的应用,如果运行在Windows平台使用JNI是是经常的,比如说读写Windows的注册表。

    NDK是Google公司推出的帮助Android开发者通过C/C++本地语言编写应用的开发包,包含了C/C++的头文件、库文件、说明文档和示例代码,我们可以理解为Windows Platform SDK一样,是纯C/C++编写的,但是Android并不支持纯C/C++编写的应用,同时NDK提供的库和函数功能很有限,仅仅处理些算法效率敏感的问题,所以Android123推荐初学者学好Java后再学习JNI。

    说白了,JNI是JAVA特有的东西,是为了提升JAVA语言的性能,C/C++效率肯定比JAVA的高,JNI的作用就是将一些耗时耗内存的工作交给C/C++来做,然后通过JNI来调用,因为JAVA不能直接使用外部语言。本地方法的声明,实现以及调用接下来会一一介绍。

    在PC端例如在windows中,通过VC等编译器可以将生成的本地方法(也就是.c文件)生成动态链接库(.dll),而在android中(基于Linux的系统)会生成.so文件,而NDK就起到了类似如VC编译器的作用,为了方面开发者将所编写的.c文件打包成.so文件之用。

    下面写个小例子方面理解Android中JNI和NDK的使用。


       JNI是Java Native Interface的缩写,通过JNI可以方便我们在Android平台上进行C/C++编程。要用JNI首先必须安装Android的NDK,配置好NDK环境之后就可以在Eclipse下进行C/C++开发了。

        其实JNI的原理很容易理解,其本质就是在Java层定义一个接口,同时在C层用C/C++代码实现该接口的功能并编译成动态链接库,这样Activity就可以通过Java层接口调用生成的动态链接库,完成相应的功能。简单地说就是两点:(1)定义Java接口(JNI),(2)用C/C++实现接口功能并打包成库文件以供调用。

        在这里,我将假设读者已经在Linux环境下安装好了NDK,并且会使用Eclipse。下面以C++为例一步一步说明JNI开发过程。


    1 创建Android工程

        新建一个TestJNI目录,用Eclipse在该目录下创建一个名为TestJNI的Android工程,包名为com.TestJNI.jni。创建完成后在工程的src目录下会自动创建一个名为TestJNIActivity.java的文件。

     

    2 设计Java接口
        先不用管这个文件,在该文件的位置再创建一个名为TestJNI.java文件:


     

    打开TestJNI.java,我们将在这个文件里创建一个JNI接口类,该Java类提供一个加法运算的接口:



    这里的函数声明一定要加native修饰。

     

    3 编译JNI

        将TestJNI.java文件复制到工程的bin目录下,在终端中进入该工程的bin目录,输入javac TestJNI.java,这时会生成一个TestJNI.class文件。



    在bin文件夹下,如果没有则创建目录:/com/TestJNI/jni,并把TestJNI.class复制到/bin/com/TestJNI/jni目录下。然后在终端里进入工程的bin目录,输入javah -jni com.TestJNI.jni.TestJNI,此时会生成一个com_TestJNI_jni_TestJNI.h文件。



    com_TestJNI_jni_TestJNI.h文件就是对应于上面定义的Java接口的C/C++头文件。打开这个文件,可以看到系统已经为我们自动完成了接口函数的声明:



    这三个函数分别对应于JNI的三个接口函数,命名方式只是在前面加上了Java包名。

     

    4 用C/C++实现JNI

        有了JNI的C/C++头文件,就可以在C层实现JNI接口了。首先在工程目录下创建一个jni目录,这个目录就是专门用来放C/C++代码的。把com_TestJNI_jni_TestJNI.h文件复制到jni目录下,并在这里创建一个com_TestJNI_jni_TestJNI.cpp文件。

        由于我想用C++来实现JNI,所以上面两个文件我只是用来作为动态链接库的接口,具体的实现我希望放在一个类里面来完成,因此我再添加两个文件:Add.h和Add.cpp。



    下面我们就来实现CAdd类和JNI接口。首先实现CAdd类:

    Add.h

     

    Add.cpp



    然后我们来写com_TestJNI_jni_TestJNI.cpp,实现JNI:


    到此我们的C/C++部分就全部实现了。

    5 创建mk文件

        JNI实现了之后就要把C/C++代码编译成动态链接库.so文件,这样Java程序才能调用JNI的接口。要编译so文件,需要写Android.mk和Application.mk两个文件。我们先来写Android.mk。

        先在工程目录的jni下创建一个Android.mk文件:



    然后打开文件在里面输入如下内容:



    其中LOCAL_PATH是C/C++代码所在目录,也就是我们的jni目录。

    LOCAL_MODULE是要编译的库的名称。编译器会自动在前面加上lib,在后面加上.so。

    LOCAL_SRC_FILES是要编译的C/C++文件。



    6 编译动态链接库

        写完了mk文件就可以开始编译C/C++代码了。在终端里进入工程的根目录,输入ndk-build即可:



    编译成功后会在工程目录的libs/armeabi目录下生成一个libTestJNI.so文件。

     

    7 在Java中调用JNI

        大家应该还记得在创建工程的时候就已经生成了一个TestJNIActivity.java文件吧。现在打开这个文件,我们来对它进行一点修改,添加我们调用JNI计算加法的代码,如下:


    在这里我们首先用System.loadLibrary("TestJNI")加载了C/C++编译的so文件,然后创建了一个TestJNI对象,通过该对象调用了so库中的方法。现在的代码应该是编译不过去的,因为我们还没有给TextView添加ID,所以R.id.tv是无效的。那么我们来添加这个ID。找到res/layout目录下的main.xml文件:

     

    双击打开该文件,在TextView标签下添加一行android:id="@+id/tv",这样就创建了一个名为tv的域并自动分配ID,如下图:



    现在编译工程,就可以顺利通过了。程序运行结果如下:

     

        这个例子只是为了显示JNI的用法,只要写好了JNI接口,其他的编程就跟C/C++一样了。编译动态链接库的时候,除了使用ndk-build命令之外,也可以在Eclipse工程中配置一个Builder,直接在Eclipse下编译,具体请参考下篇内容。

    
    
    
    
    展开全文
  • Android Jni Ndk配置问题

    2017-08-31 13:23:32
    v7a/objs/apm-plugin-video-preprocessing/video_preprocessing_plugin_jni.o.d -gcc-toolchain D:/androidStudio/SDK/ndk-bundle/build//../toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64 -fpic -...
  • 我现在用JNI NDK调用,通过dlopen方法打开想要调用的so库,可是他这个dlopen只能打开jniLibs文件下的so库,但这个文件夹又是ndk-build才会生成,所以我现在按照网上的办法,写Android.mk ,将这个库在ndk-build的...
  • JNI NDK SO DLL

    千次阅读 2013-01-22 15:57:07
    JNI JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,...

    JNI

    JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

    设计目的:标准Java类库可能无法满足程序特性需要,或者已经有别的程序实现(如汇编语言实现等),这时可以通过JNI调用这个程序,在自己的Java代码中使用。


    (windows下编译成dll,linux下编译成so)

    动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL文件是一种不可执行的二进制代码文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。DLL 是一个包含可由多个程序同时使用的代码和数据的库。

    生成之后,java代码利用System.loadLibrary(**)来调用dll(/so)。


    1、前言

    626日,Google Android发布了NDK,引起了很多发人员的兴趣。NDK全称:Native Development Kit。下载地址为:http://developer.android.com/sdk/ndk/1.5_r1/index.html

    2、误解

    新出生的事物,除了惊喜外,也会给我们带来一定的迷惑、误解。

    2.1、误解一:NDK发布之前,Android不支持进行C开发

    Google中搜索“NDK”,很多“Android终于可以使用C++开发之类的标题,这是一种对Android平台编程方式的误解。其实,Android平台从诞生起,就已经支持CC++开发。众所周知,AndroidSDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于第三方应用只能使用Java”。在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可以实现的。

    当然这种误解的产生是有根源的:在Android SDK文档里,找不到任何JNI方面的帮助。即使第三方应用开发者使用JNI完成了自己的C动态链接库(so)开发,但是so如何和应用程序一起打包成apk并发布?这里面也存在技术障碍。我曾经花了不少时间,安装交叉编译器创建so,并通过asset(资源)方式,实现捆绑so发布。但这种方式只能属于取巧的方式,并非官方支持。所以,在NDK出来之前,我们将“Java+C”的开发模式称之为灰色模式,即官方既不声明支持这种方式,也不声明不支持这种方式

    2.2、误解二:有了NDK,我们可以使用纯C开发Android应用

    Android SDK采用Java语言发布,把众多的C开发人员排除在第三方应用开发外(注意:我们所有讨论都是基于第三方应用开发Android系统基于Linux,系统级别的开发肯定是支持C语言的。)。NDK的发布,许多人会误以为,类似于SymbianWM,在Android平台上终于可以使用纯CC++开发第三方应用了!其实不然,NDK文档明确说明:it is not a good way。因为NDK并没有提供各种系统事件处理支持,也没有提供应用程序生命周期维护。此外,在本次发布的NDK中,应用程序UI方面的API也没有提供。至少目前来说,使用纯CC++开发一个完整应用的条件还不完备。


    3、NDK是什么

    NDK进行了粗略的研究后,我对“NDK是什么的理解如下:

    1、NDK是一系列工具的集合。

    • NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将sojava应用一起打包成apk。这些工具对开发者的帮助是巨大的。
    • NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出哪些文件需要编译编译特性要求等),就可以创建出so
    • NDK可以自动地将soJava应用一起打包,极大地减轻了开发人员的打包工作。

    2、NDK提供了一份稳定、功能有限的API头文件声明。

    Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。


     

    4、NDK带来什么

    1、NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。

    • 使用NDK,我们可以将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。
    • 使用NDK,我们可以将需要保密的应用逻辑使用C开发。毕竟,Java包都是可以反编译的。
    • NDK促使专业so组件商的出现。(乐观猜想,要视乎Android用户的数量)

    2、NDK将是Android平台支持C开发的开端。

    NDK提供了的开发工具集合,使开发人员可以便捷地开发、发布C组件。同时,Google承诺在NDK后续版本中提高可调式能力,即提供远程的gdb工具,使我们可以便捷地调试C源码。在支持Android平台C开发,我们能感觉到Google花费了很大精力,我们有理由憧憬“C组件支持只是Google Android平台上C开发的开端。毕竟,C程序员仍然是码农阵营中的绝对主力,将这部分人排除在Android应用开发之外,显然是不利于Android平台繁荣昌盛的。


    JNI是Java调用Native机制。
    NDKshi Google推出的帮助Android开发者通过c或c++本地语言编写应用的开发包,是纯C/C++编写的。
    NDK多了一个把so和apk打包的工具,JNI并没有打包,只是把so放到文件系统的指定位置。
    jni是java调用本地方法(c、c++写的),android 下是用JNI是需要的.so文件,是通过NDK编译生成的。
    NDK(Native Development Kit)“原生”也就是二进制

    android常用的开发方式是java封装的库,而这些库的底层实现是由C/C++实现,如媒体,图形库等

    java调用这样实现就需要用JNI(Java Native Interface)

    平时用的也就是google给我们封装的好的库,即便是底层实现用的不是Java,但都有统一的Java接口


    而NDK的作用是“我们自己写本地代码”(C/C++),自己用JNI封装成Java接口

    比如我们想做个计算,二这不是Java的强项,可以用C/C++来写实现,返回一个运算结果就行了



    展开全文
  • JNI NDK开发笔记

    2016-12-27 17:38:13
    谷歌从AndroidStudio2.2以上就添加了Cmake方式来编译NDK代码,并从NDK例子看出,默认编译的方式就是cmake方式。 首先需要下载相关工具支持,使用SDK Manager即可: 使用方式:新建项目时勾选这个选项: 项目结构...

    目录

    github源码地址:

    详细请见源码: 下载地址

    源码包含了: JNI静态注册,动态注册,以及基于openssl实现的3DES、AES、MD5、RSA加解密实现

    下面是干货:

    Cmake模式:

    谷歌从AndroidStudio2.2以上就添加了Cmake方式来编译NDK代码,并从NDK例子看出,默认编译的方式就是cmake方式。

    首先需要下载相关工具支持,使用SDK Manager即可:
    这里写图片描述

    使用方式:新建项目时勾选这个选项:
    这里写图片描述

    项目结构:
    这里写图片描述

    gradle配置:
    这里写图片描述

    java代码:

    package com.jnitest.luyanhao.jni_study;
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
        // Example of a call to a native method
        TextView tv = (TextView) findViewById(R.id.sample_text);
        tv.setText(stringFromJNI());
        }
    
        /**
         * A native method that is implemented by the 'native-lib' native library,
         * which is packaged with this application.
         */
        public native String stringFromJNI();
    
        // Used to load the 'native-lib' library on application startup.
        static {
            System.loadLibrary("native-lib");
        }
    }
    

    C++代码:native-lib.cpp 它使用的是静态注册的方式,动态注册的方式代码同传统JNI。

    #include <jni.h>
    #include <string>
    
    extern "C"
    jstring
    Java_com_jnitest_luyanhao_jni_1study_MainActivity_stringFromJNI(
            JNIEnv* env,
            jobject /* this */) {
        std::string hello = "Hello from C++";
        return env->NewStringUTF(hello.c_str());
    }
    

    传统NDK-Build模式

    studio提供了强大的插件功能External Tools,我们使用它配置两个非常有用的插件:
    进入Settings–>Tools–>ExternalTools,点击+号增加。
    这里写图片描述

    javah -jni插件配置:
    这里写图片描述

    javah -jni命令,是根据java文件生成.h头文件的,会自动根据java文件中的类名(包含包名)与方法名生成对应的C/C++里面的方法名。下面是参数配置及其含义:
    1. Program: $JDKPath$\bin\javah.exe 这里配置的是JDK目录下的javah.exe的路径。
    2. Parametes: -classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$ 这里$FileClass$指的是要执行操作的类名(即我们操作的文件),$ModuleFileDir$/src/main/jni表示生成的文件保存在这个module目录的src/main/jni目录下。
    3. Working: $ModuleFileDir$\src\main\java module目录下的src\main\java目录(不是很理解)。

    使用方式:选中java文件—>右键—>External Tools—>javah-jni,将生成jni文件夹以及文件夹下的 包名.类名的.h头文件 (名字过长,我们可以自己重命名)。

    ndk-build插件配置:
    这里写图片描述

    ndk -build命令,是根据C/C++文件生成so文件的。下面是参数配置及其含义:
    1. Program: E:\work\Android\Sdk\ndk-bundle\build\ndk-build.cmd 这里配置的是ndk下的ndk-build.cmd的路径(根据实际情况填写)。
    2. Working: $ModuleFileDir$\src\main\

    使用方式:选中C/C++文件—>右键—>ExternalTools—>ndk-build,将在main文件夹下生成libs文件夹以及多个so文件,我们可以移动至jniLibs目录下去。

    项目目录结构:
    这里写图片描述

    基于openssl实现的3DES、AES、MD5、RSA加解密

    目录结构:
    这里写图片描述

    CMakeLists.txt

    
    cmake_minimum_required(VERSION 3.4.1)
    
    
    include_directories(
        src/main/cpp/openssllib/include/openssl/
        )
    
    link_directories(
        src/main/cpp/openssllib/
        )
    
    
    add_library(
        native
    
        SHARED
    
        src/main/cpp/MyRSA.cpp
        src/main/cpp/MyBASE64.cpp
        src/main/cpp/My3DES.cpp
        src/main/cpp/MyMD5.cpp
        src/main/cpp/MyAES.cpp
        src/main/cpp/native-lib.cpp
        )
    
    find_library(
        log-lib
        log
        android
        )
    
    target_link_libraries(
        native
        libcrypto.a
        libssl.a
        android
        ${log-lib}
        ) # 链接动态库
    展开全文
  • windows jni ndk流程

    2012-02-21 18:29:16
    带native声明的java程序---------->javac 为class文件--------->javah为jni头文件--------->c或c++实现头文件--------> 编写Android.mk文件------->ndk-build jni 目录输出*.so动态库---->eclipse中使用动态库
  • Android studio JNI
  • Android JNI NDK 编程学习

    2014-04-05 16:57:04
    最近一直在研究 Android  http://developer.android.com/tools/sdk/ndk/index.html
  • JNI NDK 静态库相关

    2014-06-11 17:06:50
    关于JNI调用第三方静态库
  • Android JNI NDK HelloWorld

    千次阅读 2013-02-19 17:54:09
    复习Android NDK ,HelloWorld 作例子 上马:: 1、创建一个Android Project 2、其中的 MainActivity 的代码: package biz.inspeed.hello; import android.os.Bundle; import android.app.Activity; import ...
  • 报以下错误: Error while setting up port forwarding com.android.ddmlib.AdbCommandRejectedException: cannot bind to socket: No error 运行程序还没进入断点调试就报此错误 怎么解决呢?
  • jni ndk hal 是啥关系

    千次阅读 2014-07-26 09:52:36
    问:jni ndk hal 是啥关系 答:hal是统称 java -> hal -> driver。把java到driver中间的统称为hal。 jni是一种纯语言之间调用的一种实现机制java->c/c++,和平台无关。以上的实现方法一般只有在系统开发的时候...
  • 1、将ndk添加至环境变量 至添加一次即可,即下面语句使用一次之后以后就不用再使用了 echo 'export PATH=~/Desktop/Android/android-sdk-linux/ndk-bundle/:$PATH' >> ~/.bashrc 11 echo ‘export PATH=你的具体ndk...
  • Android-JNI NDK的学习记录    1.JNI和JDK的初认识:  JNI:java调用C,C++的代码技术,但是光能调用不行,首先你得生成被调用的东西,你的应用需要打包发布。对于开发人员来说,这些事情越方便越好。最...
  • 众所周知android app主要由java和jni源码组成,java源码可以直接用eclipse的debug方便的调试,而jni的代码调试起来就相对麻烦一点了,下面是我这几天研究ndk-gdb的总结: 1)建立android工程。 2)编译生成 ...
  • 示例:ndk-build NDK_PROJECT_PATH=E:\android\android_studio_dir\Mt9v034\app\src\main 2、NDK_LIBS_OUT 说明:指定.so文件输出目录,默认值为"$(NDK_PROJECT_PATH)/libs" 示例:ndk-build NDK_LIB...
  • Android加密 JNI NDK 验证签名和包名

    千次阅读 2018-05-21 15:08:42
    ndk的环境配置就不写了,网上很多 首先新建一个项目,然后在包名下新建一个类,定义自己需要的native方法 public class SingatureClass { //验证包名 public native String verificationPackage(Object context...
  • 一,开发环境配置 ... 所用的所有软件及开发平台:Win7+NetBeans+Vmware+ubuntu+NDK+android SDK  首先,在Win7平台下面配置好开发android的环境,具体细节参照博客:http://blog.csdn.net/tianshuai11/
  • 在Android Studio 上编写jni程序入门 1、下载NDK包,在谷歌官网(或者其他地方)下载NDK包,解压压缩包到你想存放的地方。 2、在Android Studio中添加NDK文件存放路径:  2.1 首先需要确认你的Android Studio是否...
  • android studio使用jni ndk会出现的问题

    千次阅读 2017-03-30 09:09:14
    当我们在开发时需要用到包含本地方法的库时,需要用ndk,会出现下列问题 1.可能会出现找不到ndk: Error:Execution failed for task ':serialPortLibrary:compileReleaseNdk'. > Error: Your project contains C++ ...
  • Android Studio中JNI NDK开发(一)

    千次阅读 2017-04-20 08:38:09
    NDKJNI第一种方式 建议安装LLDB,2.2之后可安装CMake。 ndk也可以在此安装 1.cd 进入classes文件路径 cd E:\MyWorkSpace\NDKDemo\app\build\intermediates\classes\debug 2.生成.h文件 javah -jni ...
  • Android Studio中JNI NDK开发(三)

    千次阅读 2017-05-10 19:58:26
    新建工程的时候选择c++支持,可直接生成hello jni的demo JNI开发常见错误 本地方法没有找到 ①函数名问题,有下划线时可能出问题。 可用_1解决,解决不了时可用javah自动生成.h文件,文件中有方法名,复制...
  • 0. 些在前面: 最近,又用到ndk去进行jni的开发了,居然连最简单的hello-jni都没有编译过。 1. 报错如下: D/dalvikvm(16064): Trying to load lib /data/data/factorytest.Android.com/lib/libhello-jni.so ...
  • JNI/NDK 详解  最近由于项目需求,要进行JNI/NDK开发,令人糟糕是相关的技术文档很多但都是比较老的开发方式。例如Eclipse集成方式、命令集成方式、android.mk文件集成方式。   令人苦恼的是,按照教程去配置...
  • android Jni NDK开发环境搭建及其简单实例的编写  由于工作需要,需要采用开发想要的JNI,由于之前没有接触过安卓的开发,所以更加网上的帖子,学习了下。遇到了些问题,然后总结下学习过程中的问题和开发流程 ...
  • NDK 环境配置 对于使用Eclipse开发,我们希望EC能自动的编译我们的NDK,那么只需要为工程添加一个Builders即可。 对于Windows的开发,如果使用的NDK是r7之前的版本,必须要安装Cygwin才能使用NDK,所以为EC需要...
  • JNI/NDK sig签名的实现方法简介  通过第四篇文章的讲解,我们接触到sig签名的一个东西。签名又在C/C++调用Java层代码的时候又显得十分重要。下面详细介绍一下生成签名的方法。JNI/NDK sig签名的实现方法具体实现 ...

空空如也

1 2 3 4 5 ... 20
收藏数 73,834
精华内容 29,533
关键字:

jni