如何为mergeJniLibFolders

时间:2018-11-14 13:31:22

标签: android android-studio android-gradle

有一点背景知识,我有一个名为“ prebuilt”的自定义android构建类型,旨在将其部署到android系统映像中。我需要自定义gradle任务来修改资产和jniLibs文件夹,以便它们与apk分开交付(例如,my-app-prebuilt.apk,my-app-prebuilt-assets.zip,my-app-rebuilt-libs。压缩)。我不想为正常部署修改调试或发布buildType。

一旦偶然发现正确的任务mergeAssets进行修改,剥离资产的步骤就相当容易了

buildTypes {
        applicationVariants.all { variant ->
            if (variant.buildType.name == 'prebuilt') {
                variant.mergeAssets.doLast {
                    // Delete from prebuilt build type. It will be delivered in parallel.
                    delete(fileTree(dir: variant.mergeAssets.outputDir, includes: ['**/somestuff/*']))
                }
                // I want mergeJniLibFolders but this doesn't seem to exist?
                variant.mergeJniLibFolders.doLast {
                    delete(fileTree(dir: variant.mergeJniLibs.outputDir, includes: ['**/*.so']))
                }
            }
}

mergeJniLibFolders属性出现错误:

  

无法获取类型为com.android.build.gradle.internal.api.ApplicationVariantImpl的对象的未知属性'mergeJniLibFolders'。

我期望mergeJniLibFoldersmergePrebuiltJniLibFolders可以被修改以执行删除库的第二步。我开始通过gradle ApplicationVariantImpl感到不满意。

此外,还需要variant对象才能知道outputDir。一段时间以来,我一直在考虑可以制作一个task stripPrebuiltAssets << { dependsOn: mergePrebuiltMergeAssets, ...},但是我没有变体对象。这也让我感到困惑。

我在黑暗中摸索,对使用Android Plugin DSL可以做什么没有很好的认识。我已经通读了几次参考书,并对AppExtension和可以修改的属性有相当的了解,但是这如何转化为Gradle树中的一百个任务呢?我似乎缺少资源以更好地理解这一点。

我的Android Studio糟糕的Gradle自动完成功能也令人沮丧。似乎只有我已经使用过的情况下,它才能确定一个自动完成选项。我正在使用

  • Android Studio 3.2.1
  • 4.10.2级
  • com.android.tools.build:gradle:3.2.1

奖金问题是将我要在两个规则中剥离的资产和jniLib压缩在一起,以便与my-app-prebuilt.apk一起使用。我大致了解我需要一个Zip类型的任务,该任务将压缩文件夹/build/intermediates/transforms/mergeJniLibs/prebuilt/0/lib/,然后删除该文件夹。我也希望variant.mergeJniLibs.outputDir存在,但这似乎也没有。

为任何见识加油。

0 个答案:

没有答案