美文网首页
Android JNI beta

Android JNI beta

作者: 码农老谭 | 来源:发表于2019-09-30 17:22 被阅读0次

    完整命令,自动生成jni目录 生成.h文件命令

    没有引用v4跟v7可以不用添加

    加入v4和v7库的完整命令如下:

    javah -d jni -classpath D:\ide\android-sdk\platforms\android- 22\android.jar;D:\ide\android-sdk\extras\android\support\v4\android-  support-v4.jar;D:\ide\android-sdk\extras\android\sup
    port\v7\appcompat\libs\android-support-v7-  appcompat.jar;..\..\build\intermediates\classes\debug  com.test.JniUtils
    
    ..\..\build\intermediates\classes\debug   //生成.h的路径
    com.test.JniUtils            //类完整路径名
    

    我们看到-classpath的参数太过冗长,所以通过设置环境变量大大简化这一命令。

    1、 增加ANDROID_SDK_HOME
    如果没有设置过ANDROID_SDK_HOME,打开环境变量添加:

    key: 
    ANDROID_SDK_HOME 
    value: 
    path\to\sdk 
    

    value就是所使用的SDK的物理路径

    2、 修改CLASSPATH
    在CLASSPATH加入如下路径

    %ANDROID_SDK_HOME%\platforms\android-22\android.jar;
    %ANDROID_SDK_HOME%\extras\android\support\v4\android-support-v4.jar;
    %ANDROID_SDK_HOME%\extras\android\support\v7\appcompat\libs\android-support-v7-appcompat.jar
    

    即android.jar、android-support-v4.jar、android-support-v7-appcompat.jar的lib文件路径。

    于是这样命令就简化为:

    javah -d jni ..\..\build\intermediates\classes\debug com.test.JniUtils   //类的完整路径
    

    简单命令,手动生成jni目录 生成.h文件命令

    简单生成.h文件

    cd app/build/intermediates/classes/debug
    javah -jni com.test.JniUtils
    

    cd app/src/main
    new jni Directory
    copy app/build/intermediates/classes/debug/com_test_JniUtils.h

    Error: NDK integration is deprecated in the current plugin.

    在gradle.properties文件末尾添加android.useDeprecatedNdk=true

    生成.so文件 配置

    open app-->build.gradle

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            ndk {
                moduleName "JniUtils"             //生成的so名字
                abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。
            }
        }
        debug {
            ndk {
                moduleName "JniUtils"             //生成的so名字
                abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。
            }
        }
    }
    
    //ndk windows 需要
    sourceSets {
    main {
        jni.srcDirs = []
       }
    }
    

    Run .c文件修改

    Jni_run_示例.jpg

    示例代码

    JniUtils.java

    public class JniUtils {
    
    static {
        System.loadLibrary("JniUtils");   //生成.h文件时,可以先不写,因为没有
    }
    public native String getCLanguageString();
    }
    

    JniUtils.c

    #include "com_cayden_jnis_JniUtils.h"
     /*
    * Class:     com_cayden_jnis_JniUtils
    * Method:    getCLanguageString
    * Signature: ()Ljava/lang/String;
    */
    JNIEXPORT jstring JNICALL     Java_com_cayden_jnis_JniUtils_getCLanguageString
        (JNIEnv *env, jobject obj){
    return (*env)->NewStringUTF(env,"I'm jni from to C");
    }
    

    相关文章

      网友评论

          本文标题:Android JNI beta

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