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

时间:2019-05-10 09:56:32

标签: android android-gradle

由于从事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是什么,无论构建类型如何,它都可以运行。如果我将版本放到调试后,则在任何一个版本中都不会得到示例示例。如果我在发布后进行调试,则两者都会得到示例代码。

我如何得到想要的东西?

1 个答案:

答案 0 :(得分:0)

通常,应该像其他配置块一样配置AaptOptions。尝试运行该脚本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
            }
        }
    }
}