繁体   English   中英

如何在Android设备上管理调试和发布版本?

[英]how to manage debug and release version on android device?

我是Android开发人员的新手,我几乎准备好发布我的应用程序的第一个版本:)

在我的手机上测试签名版本apk时,它拒绝安装,因为调试版本随调试签名一起安装。

所以我必须卸载调试版本,但它删除了我的所有数据库(它将对我正在测试它的朋友这样做)。

有没有办法管理同一个应用程序的调试和发布版本而不会丢失数据?

许多Android项目开始使用gradle构建系统(当我们开始使用Android Studio时,我们已转换到它)。 幸运的是,gradle使得同时安装开发和发布版本非常简单,每个版本都有自己独立的数据。 Android文档涵盖了这一点,只需将applicationIdSuffix添加到您的调试构建类型,如下所示:

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

我不知道有什么简单的方法来解决卸载/重新安装过程,所以你的选择包括......

  • 购买第二台设备进行测试(现在有些Android设备非常便宜,特别是在eBay上)
  • 使用模拟器进行测试

我看到同样的问题,但这是预料之中的,所以我将手机用于调试开发,并将平板电脑用于生产测试。 当我接近发布时,我在两个设备和模拟器上测试生产版本。

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

我认为您的测试人员不需要使用调试和发布版本。

谢谢@Evan您的解决方案非常完美:

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

要在调试模式下运行时将“(DEBUG)”附加到您的应用程序标题,请将此代码放在Activity的onCreate中:

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

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

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

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

<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>] 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM