一jar包生成(library才能打成jar)
如果是application,可以修改Application为library,需要修改的地方如下:
apply plugin: 'com.android.application' 改为:apply plugin: 'com.android.library'
然后注释掉defaultConfig代码块中 applicationId这行代码
步骤:
1.把需要打入jar的代码放到创建的library中
2.把需要打入jar的module的gradle中添加配置
//与android同级
task makeJar(type:Copy){
//如果之前存在,则先删除
delete 'build/libs/aaa/eee.jar'
//设置拷贝的文件
from('build/intermediates/packaged-classes/release/')
//生成jar包后的文件目录位置
into('build/libs/aaa/')
//include,exclude参数来设置过滤
include('classes.jar')
//重命名
rename('classes.jar','eee.jar')
}
makeJar.dependsOn(build)
3.找到如下图的makeJar双击执行(只有配置了步骤2,才有makejar命令)
4.找到生成的jar文件即可(按照上图配置生成的文件目录为:build/libs/aaa/eee.jar)
注意:jar文件不打入资源文件,清单文件。上述打jar的方式没有混淆,如需要混淆自己google
二.arr生成和使用(module才能打成arr)
如果打成jar,资源文件时无法打入的,如果想要打入资源文件,清单配置文件,so文件我们可以把librarymodule打成arr文件。
步骤:
1.把需要打入jar的代码放到创建的module中
2.如需要混淆,自己开启混淆,配置混淆(自行google)
3..找到如下图的assembleRelease 双击执行
4.去找到生成的arr文件即可使用(/build/outputs/aar/xxx.aar)
5.arr如何使用:放到libs下:
方式一:
android{
repositories {
flatDir {
dirs 'libs'
}
}
}
dependencies {
implementation (name: 'barcode_scanner_library_v2.3.2.0', ext: 'aar')
}
方式二:
dependencies {
将
implementation fileTree(dir: 'libs', include: ['*.jar'])
改为
implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
}
三so文件生成和使用
配置
1.JNI是个协议,NDK是google提供开发JNI工具包
2.下载NDK,配置NDK环境变量和Studio依赖 ;使用命令ndk-build检查配置(如path:D:\develop\Sdk\ndk-bundle)
3.兼容老的NDK,gradle.properties配置android.useDeprecatedNdk=true
写代码
1.mian文件夹下创建jni文件,再创建c,Android.mk和Application.mk文件
生成so文件
www.jianshu.com/p/92fdedddd…(如果再次打,删除build文件,找到如上图的assembleRelease 双击执行)
找到生成的so文件:app/build/intermediates/merged_native_libs/release/out/lib
使用so文件
注意:期间遇到一个坑,只加载了so文件,jni没有打成jar包,使用的时候自己写native方法,但是呢,因为jni方法和c方法需要按照一定规则,自己写native方法的时候,包名已经改变,一直报没有找到c的实现方法。
c源码
#include<stdio.h>
#include<stdlib.h>
#include<jni.h>
/**
* jstring :返回值
* Java_全类名_方法名 (.换成_)
* @param env 固定参数,里边有很多方法
* @param jobj 固定参数,谁调用这个方法就是谁的实例,类似this
* @return 返回值字符串
*/
jstring Java_com_example_myapplication_JNI_sayHello(JNIEnv* env, jobject jobj){
char* text = "hello,我是张文浩~";
return (*env)-> NewStringUTF(env,text);
}
视频教学:www.bilibili.com/video/av221… ---从26开始看