Android Studio下JNI的使用案例

Android Studio下JNI的使用案例


1. 创建一个空的Android项目JNITest,在MainActivity类下,建立本地方法getSumFromC()

  • 在activity_main文件中生成一个按钮

    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="click"
    android:text="执行C代码" />
    
  • 在MainActivity类中,写入click()方法,并且弹出计算两个数和的土司

    public void click(View v){
        Toast.makeText(this,"3 + 5的和为:" + getSumFromC(3,5),Toast.LENGTH_SHORT).show();
    }
    
  • 在MainActivity类中,写入本地方法getSumFromC()

    // 这是本地方法的格式
    public native int getSumFromC(int i, int j);
    

2. 点击Build -> Make Project,自动生成.class文件,生成的.class目录为:JNITest\app\build\intermediates\classes\debug,我们可以用.class文件生成一个.h文件

3. 利用生成的.class文件,在Terminal视图下,使用javah命令,会在main目录下生成一个名为jni的文件夹,并且生成带有jni语法的.h文件。

  • 调出Terminal视图,Terminal是android下的命令行窗口,可以输入命令

  • 在Terminal视图下,执行cd app/src/main进入到main目录下,使用如下的javah命令,生成.h文件

    // 这个命令包括了android编译类包,support-v4类包,support-v7类包的支持,不写可能会报错。其中F:\Tools\Android\SDK表示的是SDK的安装目录,你们改成自己的SDK目录就行,还有最后的包名,也需要改成你们自己的项目包名。
    
    javah -d jni -classpath F:\Tools\Android\SDK\platforms\android-21\android.jar;F:\Tools\Android\SDK\extras\android\support\v4\android-support-v4.jar;F:\Tools\Android\SDK\extras\android\support\v7\appcompat\libs\android-support-v7-appcompat.jar;..\..\build\intermediates\classes\debug com.itheima.jnitest.MainActivity
    

4. 在生成的jni目录下,新建一个hello.c文件,将步骤3中生成的.h文件中的c操作语句拷贝过来,并且使用jni语法进行修改。这里因为谷歌自身的一个bug,jni文件夹需要两个以上.c文件,因此我们自己再建一个test.c文件

  • hello.c文件代码如下,这只是一个求和的示例,你们也可以做成求差的案例,但是要注意jni语法的使用

    #include <jni.h>
    jint Java_com_itheima_jnitest_MainActivity_getSumFromC(JNIEnv * env, jobject thiz, jint i, jint j){
        return i + j;
    }
    

5. 写完了c文件,我们点击Build -> Make Project会提示我们需要进行配置

  • 配置local.properties文件,这是配置NDK的路径

    sdk.dir=F:\\Tools\\Android\\SDK
    # 配置NDK的路径
    ndk.dir=F:\\Tools\\Android\\android-ndk-r10b
    
  • 配置app->build.gradle文件,在defaultConfig中添加以下代码

    ndk{
        moduleName "hello"         // 定义生成so库文件的名字
        abiFilters "armeabi", "armeabi-v7a", "x86"  // 输出指定三种abi体系结构下的so库文件。目前可有可无
    }
    

6.配置完成,再执行Build -> Rebuild Project,会提示我们已生成so动态链接库文件

7. 加载so动态链接库文件,运行代码,成功弹出计算和的土司

  • 在MainActivity类下加载c库文件

    static {
        System.loadLibrary("hello");
    }
    
  • 运行程序,成功弹出土司

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值