android配置jni

2018-02-23  本文已影响23人  程序猿bug鱼

android配置jni

配置NDK

首先下载NDK,这个就不细说了,自行百度就OK。
接下来工程右键->openModuleSetting->SDK Location 里边的Android NDK Location填上

码代码

接下来就可以写码了:假如我要从jni中获取一串密钥
例如我新建一个类叫JNIKeyUtils


public static native String getJNIKey();
static {

        //这个名字是一会儿需要和build.gradle里边匹配上的
         System.loadLibrary("JniKey");
    }

接下来我们需要执行一串命令来获取native方法对应的.h文件
在我这是~/Device/AndroidCode/CProject/app/src/main/java
找到对应工程此路径下执行如下命令:
javah -jni com.example.yuf.myapplication.utils.JNIKeyUtils(就是JNIKeyUtils类对应的包名)

接下来就能就能看到生成了一个.h文件了
然后我们再main文件夹下新建一个文件夹叫jni
把之前生成的.h文件拷贝进去
再粘贴第二遍,改后缀名为.c.
这样jni文件夹下就有两个文件了一个是.h 一个是.c
然后打开.c文件
把对应主方法修改一下.


JNIEXPORT jstring JNICALL Java_com_example_yuf_myapplication_utils_JNIUtils_getJNIKey(JNIEnv *env, jclass jobj){
    return (*env)->NewStringUTF(env,"your key");
};

然后我们在需要的地方调用JNIKeyUtils.getJNIKey()

这样就改好了.

其他环境配置

1.local.properties文件配置如下:

ndk.dir=ndk环境位置
sdk.dir=AndroidSDK位置

2.gradle.properties文件里添加如下:
Android.useDeprecatedNdk=true

3.app build.gradle文件里面如下:


android{

defaultConfig{
//添加
ndk {
    moduleName "JniKey"
        abiFilters "armeabi", "armeabi-v7a", "x86"
    }

}
//添加
sourceSets {
    main {
            java.srcDirs = ['src/main/java', 'src/main/aidl']
                jniLibs.srcDirs = ['src/main/jniLibs']
                jni.srcDirs = []
            }
    }

}
//添加
repositories {
    mavenCentral()
        flatDir {
            dirs 'libs'
            }
    }


生成so

在工程目录下 app\build\intermediates\ndk\debug\obj\local目录查看各平台的so文件

然后拷贝到jniLibs目录下.
这是可以删掉jni文件夹和里边的.c和.h文件了
大功告成,可以运行了.

上一篇下一篇

猜你喜欢

热点阅读