如何在同一设备上安装Debug和Release版本的apk?

28

在继续开发并测试我的应用程序时,我需要在同一部手机上拥有发布版本的应用程序,以进行演示(发布版本由于没有日志记录,因此更加响应)。

问题在于,在Android设备上使两个应用程序共存的唯一方法是具有不同的软件包名称。

但是软件包名称需要重新定义和大量手动修复...更不用说这会让版本控制混乱...

理想情况下,Eclipse+ADT将允许添加修改变量,该变量将自动生成不同的软件包名称用于调试/发布,并且将允许这种共存。但是,我找不到任何可以实现这一点的机制。

您知道有什么解决方法吗?

欢迎提供创新性的解决方案和想法。

5个回答

25

使用Android Studio,因为gradle能够让你的生活更加轻松 - 只需使用applicationIdSuffix即可。

android {  
   ...  
   buildTypes {  
     release {...}  
     debug {  
       applicationIdSuffix '.debug' 
     }  
   }  
}

点击这里了解更多。


3
如何自动更新 google-services.json 文件中的“package_name”? - Divyang M
然而,这会破坏任何检查应用程序捆绑标识符的第三方服务,例如Google登录。 - Paranoid Android
请更具体地描述,@ParanoidAndroid - 它是如何破坏它的? - Marian Paździoch
@MarianPaździoch 例如使用Google登录,所创建的OAuth2客户端ID只能与一个捆绑标识关联。添加.debug将会中断该关联。 - Paranoid Android

2
我知道的唯一方法是在应用程序清单文件中更改包名称。Eclipse应该为您处理所有代码重命名。

哇!那差点就成功了。我在清单文件中的包名末尾添加了一个“d”,然后清理了项目以进行重建,Eclipse没有任何抱怨。我高兴地继续运行它,但是它却“强制关闭”了。原来我的应用程序使用了反射(类工厂),而Android根本不喜欢清单中的包名和.java包名之间的差异。虽然很接近成功,但还是+1。 - an00b
如果您的发布版本构建启用了Proguard混淆,并且如果您向proguard.cfg添加了一些自定义规则,则这些规则可能也包含包名称。此外,如果您创建了自定义View小部件并将它们添加到某个XML布局中,则它们也会以包名命名。 - superjos

2
你可以把所有的代码放在一个库项目中,然后只需创建两个普通项目,这两个项目具有不同的包名,并在两个项目中都包含库项目即可。
这样做可以将所有代码集中在一个地方。普通项目可能只需要一个有效的清单文件,该文件指向库项目中的活动即可。

图书馆项目也有调试日志记录功能... (即,与应用程序一样,图书馆项目需要条件构建)。这个解决方案对我不起作用,但对创造性建议表示 +1。 - an00b

0
在Android Studio中,使用产品风味添加构建变体,可以轻松地为各种环境进行定制,并测试同一应用程序的多个应用程序变体。请查看此链接以获取更多信息-配置Gradle

0

你可能想尝试使用 这种技术,使用 antJenkins 或其他工具来自动化包重命名,正如 @LAS_VEGAS 建议的那样。

虽然不是你所要求的,但是 这个很酷的代码片段 可以帮助你在运行时找出你的代码是调试版还是发布版。

另一个有趣的尝试可以在 这个线程 中找到。不过我不确定它是否适用于 Android。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接