完整命令,自动生成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");
}
网友评论