前言
ndk是android學習的比修之路,提高性能,so加密等,以及so移植等
配置
- 下載NDK
- local.properties 添加以下
ndk.dir=/Users/huangb/Library/Android/sdk/ndk-bundle
- gradle.properties 添加如下
android.useDeprecatedNdk=true
(ps:3.0以后 android.deprecatedNdkCompileLease=1511832698813)
- 以及在module的gradle中的defaultConfig添加
ndk{
moduleName "forkApp" //生成的so名字
ldLibs "log" //Log打印
abiFilters "armeabi", "armeabi-v7a" //輸出指定三種abi體系結(jié)構(gòu)下的so庫。目前可有可無。
}
- 注意編譯的SDK的環(huán)境最好是最新的
過程
- 新建一個class如下 這是需要使用的方法
public class JniDemo {
public native String getHelloWordText(String message);
}
- 生成JniDemo的class文件,在終端中輸入
javac JniDemo.java
- 生成.h頭文件,切換到main/java路徑在終端輸入
javah com.example.ndk.JniDemo
- 生成jni文件夾
new -> Folder -> JNI Folder - 把生成的.h頭文件復制到j(luò)ni文件夾下
- 新建一個.c文件寫入我們要處理的方法
#include "com_example_ndk_JniDemo.h"
#include <jni.h>
JNIEXPORT jstring JNICALL
Java_com_example_ndk_JniDemo_getHelloWordText
(JNIEnv *env, jobject orgin, jstring str) {
//新建一個string對象
jstring encrypt;
//把string轉(zhuǎn)為char
char *cstr = (*env)->GetStringUTFChars(env, str, 0);
// 把char轉(zhuǎn)為jstring拼接 these
encrypt = (*env)->NewStringUTF(env, strcat (cstr,"these"));
return encrypt;
}
- 構(gòu)建項目生成so Rebuild Project,生成路徑如下
117FB902-1DAB-4613-9427-D1B69219DBCC.png
項目目錄
C87AB7E0-5AFC-4743-A671-EC957F46C9B6.png
方法使用
0063CF84-58B8-4923-A72F-739D413AE587.png
結(jié)語
如果有什么問題以及有什么不對可以留言我會盡快回復喲