我在 Android Studio 项目中遇到了一个非常奇怪的问题,我完全不知所措。
这个项目有它的 core Flavor
,然后有多个通过它们自己的productFlavor
in分配的重新命名的版本build.gradle
,例如:
productFlavors {
mainBrand {
applicationId('my.main.brand.app')
buildConfigField "String", "CUSTOM_BRAND_STRING", "I am the main brand"
}
secondBrand {
applicationId('my.second.brand.app')
buildConfigField "String", "CUSTOM_BRAND_STRING", "I am the second brand"
}
thirdBrand {
applicationId('my.third.brand.app')
buildConfigField "String", "CUSTOM_BRAND_STRING", "I am the third brand"
}
fourthBrand {
applicationId('my.fourth.brand.app')
buildConfigField "String", "CUSTOM_BRAND_STRING", "I am the fourth brand"
}
}
每个品牌都可以有自己的文件夹,拥有自己的资源,文件夹的命名与Flavor
名称相同。如果品牌没有自己的文件夹,或者其文件夹中不包含资源,则它只使用主文件夹中所需的资源。
这一切已经工作了一年多,直到最近我才准备好在创建他们签名的 APKS 之前对每个品牌的 Debug 版本进行最终测试。我一直在对第二个品牌进行更改,然后切换到第三个品牌以确保一切正常,但是当我进行测试时,mainBrand
我突然无法将其安装到物理设备或模拟器上。
切换到mainBrand
Flavor
并按下Run
按钮后,它成功构建,没有任何错误,但永远不会在设备上打开。最终,大约 300 秒后,Run
窗口上会出现一条消息,说Timed out waiting for process (my.main.brand.app) to appear on *device-name*
我在构建或 logcat 中没有报告任何错误,它甚至似乎都没有尝试安装。
实际上有大约 7 个Flavors
设置,虽然只使用了 4 个,但我检查了所有这些设置,除了mainBrand
and之外一切正常sixthBrand
。
在采取步骤删除 Android Studio 之前,我提交并推送了我的项目git
,并将它们合并到我的笔记本电脑中。在我的笔记本电脑上,mainBrand
和大多数其他人一样,工作正常,但表现出fourthBrand
与我的主计算机上fifthBrand
完全相同的问题!mainBrand
我花了几个小时在笔记本电脑上进行测试,复制“工作”Flavor
及其相关文件,并重命名它们。最初使用新名称的直接副本secondBrandCopyTest
可以工作,并且随着我逐渐将所有文件和设置改回来,似乎可以继续工作gradle
,但是一旦我将其Flavor
名称重新命名为secondBrand
. 它也不适用于我以前从未使用过的其他几个名称。最终我注意到我所有的短Flavor
名称测试都失败了,在我的笔记本电脑上,我Flavors
通过将它们全部重命名为它们自己名称的更长版本来完成所有工作,例如secondBrandLongerName
. 我拒绝相信这是合法的修复,但我认为它会同时工作,我会尝试找出为什么这个“修复”
我回到我的主计算机并应用相同的逻辑 - 重命名所有Flavor
s 和关联的文件夹名称,但它仍然不起作用!
关于如何开始找出造成这种情况的原因的任何想法?我尝试过的其他事情:
- 清理和重建
- 使缓存无效并重新启动
- 完全删除 Android Studio 并重新安装(必须手动完成,因为它不能通过控制面板工作)
- 重命名项目
- 手动删除所有
build
,gradle
,idea
文件夹。 minSdkVersion
将and更改为targetSdkVersion
28、29 和 30- 将版本更改
gradle
为 7 - 构建 APK 并单独安装(也不起作用)