在 Android 中使用特定于构建的 aaptOptions(用于排除特定资产文件/文件夹)

2023-11-21

一直在开发 Android Webview 应用程序,我刚刚开始使用其中的 node_modules 文件夹,所以很自然地我做了一些关于如何排除它的研究,最终得到了这个问题在这里

尝试了一些答案,最适合我的答案是关于 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 ,无论构建类型如何。如果我将发布放在调试之后,则在任何一个构建中都不会获得示例信用。如果我在发布之后进行调试,我会在两者中获得示例信用。

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


一般情况下应该可以配置Aapt选项与任何其他配置块类似。尝试运行该脚本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
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 中使用特定于构建的 aaptOptions(用于排除特定资产文件/文件夹) 的相关文章

随机推荐