前段时间有个项目,需要用c++开发我们自己的sdk,另外,我们的sdk又依赖于另一个aar包,当时想当然的以为生成so的时候会一起把aar打包进去,结果发现调用so的时候,aar里面的类根本找不到,说明aar 并没有一起打包进so
后来想了下,既然将aar打包进so没法实现,不如把我自己的so库,还有第三方的aar再重新打一次,最终打成aar包,这样就方便多了。步骤如下:
先在原来测试我们自己so库的测试工程上新建一个moudle:
- 在原project右键->new->moudle->Andriod Library即可
-
将aar改成zip后解压,大体目录如下:
下面将上图中的classes.jar还有lib下面的jar包拷贝到新建的module下的libs目录,并将剩余的jni,AndroidManifest.xml等文件分别拷贝合并到对应的目录内
- 在主工程的build.gradle(app)里面导入我们上面的module:
implementation project(path: ':mymodule')
- 好了,再用原来测试so库的app测试下,原来aar中的类可以找到了,集成完成
5.下面就是要把我们aar拆出来的零件以及我们自己的so库重新打包成aar:
工程右侧,找到Gradle,点开后找到我们上面新建的module,点击Tasks->build->assemble
等构建完成后,aar就生成了,生成目录在我们的moudle目录下面的:
build->outputs->aar下面
- aar打包好之后,放到测试工程的 libs 目录下,并在build.gradle中引用即可:
apply plugin: 'com.android.application'
android {
........
defaultConfig {
.........
}
buildTypes {
....
}
repositories {
flatDir {
dirs 'libs'
}
}
}
dependencies {
.......
implementation(name: 'xxxxlib', ext: 'aar')
}
okay