一、问题说明
公司项目开发中为了去测试一个东西,需要将应用 applicationId 修改掉。
具体为将 com.sample.package1 修改为 com.sample.package2。
为了做到风险隔离,我直接新开了一个 test 分支,接着将 build.gradle 中的 applicationId 修改掉,测试可以正常打包运行,但是切回原分支后却死活运行不起来,还报以下错误:
Error while executing: am start -n "com.sample.package2/com.sample.package1.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.sample.package2/com.sample.package1.MainActivity }
Error type 3
Error: Activity class {com.sample.package2/com.sample.package1.MainActivity} does not exist.
Error while Launching activity
回到原分支后明明包名已经回到 com.sample.package1 了,但还是提示 com.sample.package2,就感觉很奇怪。
二、问题解决
思路 1:切到 master 分支
是不是我新开发的代码对构建有影响,切换到一个比较健康的分支测试。
不行!
思路 2:clean rebuild
是不是有一些缓存需要清理一下,然后再重新构建一下。
不行!
思路 3:在当前分支手动修改一下 build.gradle 中的 applicationId,再修改回来
先修改为:com.sample.package111
再修改为:com.sample.package1
成功 !
三、总结
可能 AS 内部有一些机制,当在 build.gradle 中手动修改的时候,构建系统会自动修改掉底层的一些东西,但直接切换分支后虽然代码变了,却无法触发这些程序。
第一次遇到这种坑,小总结一下 !