美文网首页
android配置jni

android配置jni

作者: 程序猿bug鱼 | 来源:发表于2018-02-23 17:23 被阅读23次

    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文件了
    大功告成,可以运行了.

    相关文章

      网友评论

          本文标题:android配置jni

          本文链接:https://www.haomeiwen.com/subject/ftwxxftx.html