[]( )2\. 通过java文件生成 jni
--------------------------------------------------------------------------------
1. 在代码目录`main`目录下创建`jni`的目录
2. 通过创建好的java文件自动生成`.h`文件
有两种方法都可以生成
(1)通过命令生成
(2)可以创建一个类似于快捷操作的方法
Setting->Tools->External Tools 添加一个操作方式
对应的内容如下:
Name: ndk-build
Program:JDKPathJDKPathJDKPath\bin\javah.exe
Argument:-classpath . -jni -d ModuleFileDirModuleFileDirModuleFileDir/src/main/jni FileClassFileClassFileClass
Working directory:ModuleFileDirModuleFileDirModuleFileDir\src\main\Java
说明: `Program`是 `javah`的路径,需要根据JDK的路径做调整,其它的参数可与上诉保持一致。
3. 光标对准第一步中创建的java文件,右键->External Tools->ndk-build (此时会在jni中生成对应的`.h`文件)
[]( )3\. 创建`Android.mk` 和 `Application.mk` 和 `c 文件`
------------------------------------------------------------------------------------------------------------
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := web-lib
LOCAL_SRC_FILES := jni.c
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI:=all
jni.c
#include <stdio.h>
#include <com_xx_jni_JNIUtil.h>
JNIEXPORT jstring JNICALL
Java_com_xx_jni_JNIUtil_initData(JNIEnv *env, jobject jobj){
char *cstr = “xxx”;
jstring jstr = (*env)->NewStringUTF(env, cstr);
return jstr;
}
[]( )4\. 添加build文件
---------------------------------------------------------------------------
在app/build.gradle 中的 android 标签内
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDirs = ['src/main/jniLibs']//设置目标的so存放路径
}
task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
commandLine "F:\\AndroidStudioSdk\\ndk\\20.1.5948944\\ndk-build.cmd", //配置ndk的路径
'NDK_PROJECT_PATH=build/intermediates/ndk', //ndk默认的生成so的文件
'NDK_LIBS_OUT=src/main/jniLibs', //配置的我们想要生成的so文件所在的位置
'APP_BUILD_SCRIPT=src/main/jni/Android.mk',//指定项目以这个mk的方式
'NDK_APPLOCATION_MK=src/main/jni/Application.mk'//指定项目以这个mk的方式
}
tasks.withType(JavaCompile) {
//使用ndkBuild
compileTask -> compileTask.dependsOn ndkBuild
}
[]( )5\. 编译成so
-----------------------------------------------------------------------
点击 Build -> Make Project
此时会在相应的目录中生成so文件。
此时就可以使用so文件了。
直接使用即可使用了

3993

被折叠的 条评论
为什么被折叠?



