如何在build.gradle依赖项的命令行调用中包含applicationId?

Dan*_*n J 5 android build.gradle android-gradle-plugin

我正在尝试按照此要点禁用系统动画:

task grantAnimationPermission(type: Exec, dependsOn: 'installDevDebug') {
    commandLine "adb shell pm grant $android.defaultConfig.applicationId android.permission.SET_ANIMATION_SCALE".split(' ')
}

tasks.whenTaskAdded { task ->
    if (task.name.startsWith('installDevDebugAndroidTest')) {
        task.dependsOn grantAnimationPermission
    }
}
Run Code Online (Sandbox Code Playgroud)

每当运行调试版本时,此代码都会尝试用来adb授予SET_ANIMATION_SCALE权限(上述代码的替代方案也可以).

不幸的是,当我运行它时,applicationId总是出现为null:

$ ./gradlew installDevDebugAndroidTest
<snip>
:CookBrite:grantAnimationPermission
Bad argument: java.lang.IllegalArgumentException: Unknown package: null
Run Code Online (Sandbox Code Playgroud)

如果我打印$android.defaultConfig,似乎确认applicationId为null:

ProductFlavor_Decorated{name=main, minSdkVersion=ApiVersionImpl{mApiLevel=14, mCodename='null'}, targetSdkVersion=ApiVersionImpl{mApiLevel=21, mCodename='null'}, renderscriptTargetApi=null, renderscriptSupportModeEnabled=null, renderscriptNdkModeEnabled=null, versionCode=119, versionName=1.1.4, applicationId=null, testApplicationId=null, testInstrumentationRunner=android.support.test.runner.AndroidJUnitRunner, testHandleProfiling=null, testFunctionalTest=null, signingConfig=null, resConfig=null, mBuildConfigFields={}, mResValues={}, mProguardFiles=[], mConsumerProguardFiles=[], mManifestPlaceholders={}}
Run Code Online (Sandbox Code Playgroud)

即使我的工作build.gradle很乐意支持更改所有构建版本的包名称.救命!

我也尝试将build.gradle的这些新部分包装在一个afterEvaluate部分中,但这似乎阻止它们运行(可能因为tasks.whenTaskAdded在评估后不起作用).