Android studio下使用jni(一)

android 下使用jni开发的好处是在复杂运算时提升效率;提高反编译的难度;可以跨平台使用,避免重复开发.
下面简单记录下android studio下使用jni的基本步骤:
1.配置NDK:
 (1)安装NDK,点击as的sdk Manager->SDK tools->ndk->install,easy;
 (2)环境变量:以ubuntu为例:
 终端执行sudo gedit /etc/profile,在最底部增加:
 export ANDROID_NDK=/usr/android-sdk-linux/ndk-bundle
export PATH=/usr/android-sdk-linux/ndk-bundle:$PATH
其中/usr/android-sdk-linux/ndk-bundle 替换成你的ndk路径
保存,然后终端执行source /etc/profile 使之生效;最后执行ndk-build -v
如果显示:
GNU Make 4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
说明环境配置成功.

2.生成.so库
(1)在包com.example.test下新建类MainActivity ,l类下声明本地方法:
public native String urlprotocolinfo();
(2)打开as终端,到src/main/java路径下,执行javah -d ../jni com.example.test.MainActivity,会自动在main下生成jni包,里面有一个com_example_test_MainActivity.h文件
(3)在(2)中生成的jni包中新建一个.c文件:com_example_test_MainActivity.c,并输入:

#include "com_example_test_MainActivity.h"
JNIEXPORT jstring JNICALL Java_com_example_test_MainActivity_urlprotocolinfo(JNIEnv *env, jobject obj)
{
    return (*env)->NewStringUTF(env,"Hello JNI");
}

(4)执行build->make project,会自动在app/build/intermediates/ndk/debug/lib下生成.so文件,默认是libapp.so,如果在build.gradle中加入

 defaultConfig {
       ...
        ndk {
            moduleName "NewLib"  //指定生成动态库的名称
        }
    }

则生成libNewLib.so;
(5)调用本地方法
在MainActivity中导入静态库:

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

调用:

 protected void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     String s = urlprotocolinfo();
     Log.e("jni",s);
}

打印日志:
09-29 21:09:05.278 10640-10640/com.example.test E/jni: Hello JNI
Done!
ps:(1)注意local.properties,必须要有:ndk.dir=/usr/android-sdk-linux/ndk-bundle
sdk.dir=/usr/android-sdk-linux
一般默认就有的;
(2)gradle.properties需要加
android.useDeprecatedNdk=true
字面意思是防NDK过期的.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值