【已解决】 底层so包如何一起打到上层工程(也是lib)上
现在工程有三层 底层 上层 应用层
目标是 将底层so包一起打包在上成的jar包里
底层和上层通过Gradle脚本去打包成jar包给应用层使用 期间我发现so包 没在底层打在上层的jar包中 导致应用层使用确实so包
虽然有个蠢办法就是把so包复制给应用层使用 但这就违背了简易和封装的原则了
我贴贴代码 不知道我描述明白了没
打包的是.sh 脚本
./gradlew makeJar
./gradlew buildJar
./gradlew makeLibCall
下面是底层代码的封装
//Copy类型
task makeJar(type: Copy, dependsOn :"assembleRelease") {
//设置拷贝的文件
from('build/intermediates/aar_main_jar/release/')
//打进jar包后的文件目录
into('build/outputs/libs/')
//(我们只关心classes.jar这个文件)
include('classes.jar')
//重命名
rename ('classes.jar', 'lib_webrtc.jar')
}
上层代码封装底层代码成为jar包
def jar_name = '生成.jar'
def jar_path = 'build/outputs/libs/'
def target_path = '../build/libs/'
task makeLibCall(type: Jar, dependsOn : "assembleRelease") {
archiveName = jar_name
from(project.zipTree("build/intermediates/aar_main_jar/release/classes.jar"))
from(project.zipTree("../其他工程/build/outputs/libs/lib_jx_im_alone.jar"))
from(project.zipTree("../底层代码工程名/build/outputs/libs/XXX.jar"))
from(project.zipTree("../底层代码工程名/libs/XXX-1.0.23995.jar"))
// PS (看这里 ) 我尝试在这里添加类似于jar包添加的形式 发现不行
// from(project.zipTree("../底层代码工程名/libs/x86/XXXX.so")) 不止这个类型 不过省略啦
destinationDir = file('build/outputs/libs')
exclude('**/R.class')
exclude('**/R\$*.class')
}
球球大牛们指点一下哈
big old ,help me
jar是纯代码的产物,这个是java和kt编译后class的合体。
so是c和c艹的产物,他们就好比西瓜刀和菜刀。
Android后来发现lib如果单纯是jar的话,那我如果想把图片, xml等等封装做SDK怎么办呢。
就有了后来的AAR,包含代码,so,xml,图片等等资源的一种新产物:屠龙刀。
对于你的情况,你需要做一把屠龙刀
打成 aar 包即可
突然想到 之所以区分jar包 so包 那肯定是so包不能直接转化为jar包的 那又得推回aar的形式才能解决了么 细究下去就不太懂了