入门JNI需要知道的(三)

1 篇文章 0 订阅

JNI的开发流程

基于Android studio 2.0 的JNI开发流程

  • HelloJni

    • 需求:点击一个按钮,Toast从c代码中打印出来的”HelloJni”字符串.
    • 布局就不作赘述了,下面开始具体实现步骤:

      1. 关键字native声明一个本地方法,具体内容交给c来实现.

        public native String helloFromC();
        public void click(View view){
            Toast.makeText(this, helloFromC(), Toast.LENGTH_SHORT).show();
        }
        
      2. 在module的 build.gradle 中 defaultConfig 内添加ndk.

        ndk{
            moduleName "hello" //指定最终生成库名,但是最终生成的动态链接库的文件名是libhello.so
        }
        

        同步之后如果出现报错,点击setXXX, as会在gradle.properties自动添加android.useDeprecatedNdk=true.

      3. 在调用本地方法的类中通过静态代码块加载动态库,指定库名

        static {
            System.loadLibrary("hello");//指定库名加载动态库
        }
        
      4. 缺少生成库的源码, 需要在模块中new一个jni Folder文件夹,默认在main目录下. 在jni文件夹下新建hello.c源文件,并且创建它的hello.h头文件
        helloc

      5. 在hello.c源文件中按要求实现本地方法相应函数

        #include "hello.h"  //“ ”双引号包含的头文件系统会优先在当前目录下查找
        //如果没找到,再去系统头文件目录找
        #include <jni.h> //提供java和c的基本类型及引用类型的对应关系,声明数据转换方法
        
        /**
         * 本地方法相应的函数名:Java_包名_类名_本地方法名
         * 本地方法虽然没有参数, 但是对应到本地方法的函数至少需要两个参数
         * 参数1 JNIEnv *env jni环境,调用转换数据方法
         * 参数2 jobject obj 调用本地方法类的对象
        */
        
        // String helloFromC();写作以下形式
        
        jstring Java_com_example_jnidemo_MainActivity_helloFromC(JNIEnv *env, jobject obj){
            char buf[] = "hello from c!";
        
            //还记得上一篇中提到的
        
            //JNIEnv : struct JNINativeInterface*
            //env : JNIEnv * <=> struct JNINativeInterface* *
        
            return (*env)->NewStringUTF(env, buf);
            //jstring     (*NewStringUTF)(JNIEnv*, const char*);
        }
        
      6. gradle同步, make module, 完成. 总体来说以上步骤跟eclipse开发不一样,不需要配置 Android.mk文件.

javah自动生成本地方法相应的函数声明

  • 以上Demo是手动生成本地方法相应的函数名, 如果本地方法过多或者命名过于复杂,手写容易出错.
  • 打开Terminal窗口, 在main/java文件夹和com的同层目录中执行

    \main\java>javah -classpath . -d ../jni com.example.jnidemo.MainActivity
    
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值