美文网首页
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