将aar打包进so?

前段时间有个项目,需要用c++开发我们自己的sdk,另外,我们的sdk又依赖于另一个aar包,当时想当然的以为生成so的时候会一起把aar打包进去,结果发现调用so的时候,aar里面的类根本找不到,说明aar 并没有一起打包进so

后来想了下,既然将aar打包进so没法实现,不如把我自己的so库,还有第三方的aar再重新打一次,最终打成aar包,这样就方便多了。步骤如下:

先在原来测试我们自己so库的测试工程上新建一个moudle:

  1. 在原project右键->new->moudle->Andriod Library即可
  2. 将aar改成zip后解压,大体目录如下:


    截屏2022-03-24 上午10.48.52.png

下面将上图中的classes.jar还有lib下面的jar包拷贝到新建的module下的libs目录,并将剩余的jni,AndroidManifest.xml等文件分别拷贝合并到对应的目录内

  1. 在主工程的build.gradle(app)里面导入我们上面的module:
implementation project(path: ':mymodule')
  1. 好了,再用原来测试so库的app测试下,原来aar中的类可以找到了,集成完成

5.下面就是要把我们aar拆出来的零件以及我们自己的so库重新打包成aar:


截屏2022-03-24 上午10.53.15.png

工程右侧,找到Gradle,点开后找到我们上面新建的module,点击Tasks->build->assemble
等构建完成后,aar就生成了,生成目录在我们的moudle目录下面的:
build->outputs->aar下面

  1. aar打包好之后,放到测试工程的 libs 目录下,并在build.gradle中引用即可:
apply plugin: 'com.android.application'

android {
........

    defaultConfig {
.........
    }

    buildTypes {
....
    }

    repositories {
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
   .......
    implementation(name: 'xxxxlib', ext: 'aar')
}

okay

你可能感兴趣的:(将aar打包进so?)