打包环境
Linux ubuntu
测试环境
Windows
IDE
Android studio
创建c++项目
uTools_1645068192897.png
相对于平常的项目多了一个cpp文件夹
点击MainActivity
中的stringFromJNI
方法,即可跳转到 native-lib.cpp
的对应方法
uTools_1645068453624.png
uTools_1645068674362.png
按照 示例代码 在MainActivity
中写一个public native String hello();
,对应的cpp文件会生成Java_com_example_sotest_MainActivity_hello(JNIEnv *env, jobject thiz)
方法,自己写一个返回值
uTools_1645068781106.png
uTools_1645068871720.png
uTools_1645069000399.png
此时我们就可以编译我们自己的.so库了,点击AS工具栏的Build->Make Project,编译工程后,在目录app->build->intermediates->cmake->debug->obj->下可以找到不同架构下的.so文件,如图
uTools_1645069125150.png
接下来生成对外提供的jar文件
创建一个HelloJni文件,将MainActivity中方法剪切过来
uTools_1645069361135.png
此时这两个方法是报红的,打开native-lib.cpp文件,将MainActivity全局替换为HelloJni
uTools_1645069486463.png
再调整下MainActivity的代码,这样就不会报错了,从新make下.在app下的build.gradle文件下添加如下代码
uTools_1645076322390.png
task deleteOldJar(type: Delete){
//删除上次生成的
delete 'build/libs/jni.jar'
}
task makeJar(type: Jar){
//生成的文件名
baseName 'JniLib'
//这个路径需要自己找,版本不同会有不同的路径
from('build/intermediates/javac/release/classes/')
//这个是选择上面的路径下的需要打包的文件路径
include('com/example/sotest/HelloJni.class')
}
makeJar.dependsOn(deleteOldJar, build)
将com.android.application
修改为com.android.library
,注释applicationId
uTools_1645075826918.png
在AS的右侧Gradle标签点开,app-->Tasks-->other中可以找到一个makeJar的任务,双击执行.
如果没有task,则打开settings-->Experimental取消Gradle下的Do not build Gradle task list during Gradle sync
uTools_1645076520117.png
uTools_1645076639766.png
uTools_1645076779862.png
将app->build->intermediates->libs->JniLib.jar和app->build->intermediates->cmake->debug->obj目录下的各个架构的so都复制下来,放到别的项目中的libs下
C5AC6C3E-769C-4b71-B54D-0A9C8E9F95D5.png
大功告成~~