2011-02-10 58 views
23

我是Android开发新手,我几乎准备发布我的应用程序的第一个版本:)如何在Android设备上管理调试和发布版本?

在我的手机上测试已签名的发行版apk时,它拒绝安装,因为调试版本与调试签名。

所以我必须卸载调试版本,但它会删除我所有的数据库(并且它会将其发送给正在测试它的朋友)。

有没有办法在不丢失数据的情况下管理相同应用的调试版本和发行版本?

+0

我会在一个解决方案也很感兴趣。但是,我相当确定缺少更改软件包名称,这是不可能的。 :/ – Victor 2011-02-10 17:05:47

回答

4

我不知道有任何简单的方法来做到围绕卸载获得/重装过程中,让你的选项包括...

  • 购买第二设备进行测试(一些Android设备现在是很便宜尤其是在eBay上)
  • 使用模拟器来测试

我看到了同样的问题,但它是可以预料的,所以我用手机调试开发,以及生产测试的平板电脑。当我接近发行版时,我在两个设备和仿真器上测试生产版本。

对于您的测试人员,我建议您始终为他们提供发布版本,但可以包含大量日志记录以帮助解决问题。然后,调试版本仅供您使用,并由它们发布版本。如果您为测试人员提供发行版本,他们会在升级到下一个版本时使用并累积数据,这些数据可以保留(或更新,如果您更改架构)以迁移其数据。

我看不到您的测试人员需要使用调试&发行版本。

2

为什么卸载应用程序?通常,安装相同应用程序的新版本(由软件包ID标识)将保留所有应用程序数据。

编辑:手工保留应用程序数据,将其从/data/data/my.package.name/...复制到安全的地方,然后在必要时恢复。

+1

同样的应用程序会在保留数据的同时覆盖旧的应用程序,但是您无法使用相同的程序包安装第二个应用程序,而是使用与@Geobert不同的签名。所以就是这样。 – Nanne 2011-02-10 17:10:41

+0

我没有更改软件包ID,但没有安装。我卸载了调试版本,然后安装发行版。然后当我试图从eclipse启动调试模式时,它说: – 2011-02-10 17:11:43

+0

[2011-02-10 18:11:24 - radis]将radis.apk上载到设备'10006609c6cb' [2011-02-10 18:11: 24 - radis]安装radis.apk ... [2011-02-10 18:11:25 - radis]由于应用程序签名不同,重新安装失败。 [2011-02-10 18:11:25 - radis]您必须执行应用程序的完全卸载。警告:这将删除应用程序数据! [2011-02-10 18:11:25 - radis]请在shell中执行'adb uninstall fr.geobert.Radis'。 [2011-02-10 18:11:25 - radis]发布取消! – 2011-02-10 17:12:33

29

许多Android项目开始使用gradle构建系统(我们在开始使用Android Studio时转换到了它)。幸运的是,gradle使得同时安装dev和release版本非常简单,每个版本都有自己独立的数据。该Android docs盖这一点,只需添加一个applicationIdSuffix到您的调试版本类型,像这样:

android { 
    buildTypes { 
     debug { 
      applicationIdSuffix ".debug" 
     } 
    } 
} 
2

感谢@Evan您的解决方案可以完美运行:

android { 
    buildTypes { 
     debug { 
      applicationIdSuffix ".debug" 
     } 
    } 
} 

要追加“(调试)”以应用标题在调试模式下运行时,将此代码放在您的活动的onCreate:

PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); 
    //The .debug specified in gradle 
    if (pInfo.packageName.equals("YOUR_PACKAGE_NAME_HERE.debug")) { 
     setTitle(getTitle() + " (DEBUG)"); 
} 
0

对于我来说,我还需要补充:

<permission                    
     android:name="${applicationId}.permission.C2D_MESSAGE"         
     android:protectionLevel="signature" />             

<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> 

否则,既会得到这导致了同一C2D_MESSAGE权限:

Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=<your applicationId>.permission.C2D_MESSAGE pkg=<your applicationId>] 
相关问题