android - 在 Android 中使用 Build-specific aaptOptions(用于排除特定的 Assets 文件/文件夹)

标签 android android-gradle-plugin

一直在开发一个 Android Webview 应用程序,我才刚刚开始在其中使用 node_modules 文件夹,所以我自然地对如何排除它进行了一些研究,最后我找到了 this question here

尝试了一些答案,实际上最适合我的答案是 the one about aaptOptions

所以我当然很自然地在玩它,试图弄清楚什么是有效的,并且我成功地从调试 apk 中排除了一些文件夹。

            aaptOptions {
                ignoreAssetsPattern '!node_modules:!jsunmin:!.idea:!jade:!css-scss:'
            }

而且我确实可以确认这些文件夹不包含在 Android Studio 的最终 APK 中!成功!

所以后来我意识到我可以做一些聪明的事情:当我运行我的应用程序时,在我的端测试它,调试它,我喜欢在某些地方自动放入某些凭据 - 我用 javascript 做这个 - 但是显然,我不希望这些凭据包含在我可能发送给世界的 APK 中——即使我已经对其进行了编码,除非我正在调试,否则不会自动输入凭据,但这些凭据实际上仍然在 javascript 文件中,大概有人可以进去看看!

所以我的想法是创建一个文件“example-creds.js”,并使用 aaptOptions 不包含该文件,仅在发布版本中,所以我想出了一些看起来像这样的东西(去除了额外的细节):
android {
    buildTypes {
        release {
            aaptOptions {
                ignoreAssetsPattern '!node_modules:!jsunmin:!.idea:!jade:!css-scss:!example-creds.js:'
            }
        }

        debug {
            aaptOptions {
                ignoreAssetsPattern '!node_modules:!jsunmin:!.idea:!jade:!css-scss:'
            }
        }
    }
}

但它不起作用! 我已经对其进行了测试,无论构建类型如何,它似乎都可以运行最后定义的 aaptOptions 。如果我在调试后发布,我在任何一个构建中都没有获得示例信用。如果我在发布后进行调试,我会在两者中都获得 example-creds。

我怎样才能得到我正在寻找的东西?

最佳答案

一般应该可以配置AaptOptions与任何其他配置 block 一样。尝试运行该脚本afterEvaluate (这是在评估了 aaptOptions 之后):

task afterEvaluate {
    doLast {
        applicationVariants.all { variant ->
            variant.outputs.all { output ->
                def pattern = "!node_modules:!jsunmin:!.idea:!jade:!css-scss:"
                if(variant.getBuildType().getName() == 'release') {
                    pattern = pattern + "!example-creds.js:"
                }
                aaptOptions.ignoreAssetsPattern = pattern
            }
        }
    }
}

关于android - 在 Android 中使用 Build-specific aaptOptions(用于排除特定的 Assets 文件/文件夹),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56075155/

相关文章:

android - compileSdkVersion 和 targetSdkVersion 有什么区别?

java - 如何删除android中的tabStrip?

android - 返回后的 kotlin android fragment 空回收器 View

Gradle 插件更新并迁移到 annotationProcessor 后,Android 数据绑定(bind)构建失败

Android:处理来自 gradle 的 transformClassesWithDexForRelease 错误

android - Gradle插件2.1.0 : app crashes on launch

安卓工作室 3.1.3 错误 : Unable to resolve dependency

android - Adview 内容与我的应用主题不匹配

java - 将大流转换为字符串时内存不足

android - 弹出菜单显示时工具栏滚动