Android手机上同时安装正式包与测试包的方法

1. 前言

Maybe 你会有这个烦恼,在开发的时候,测试突然告诉你,正式包上有点问题,需要看一下,这时候你打开测试机发现上面装的是测试包,没事,那就卸载了装个正式包呗。然后嘞,正式包的问题确认完了,发现不是 Bug,而是一个 Feature,你需要回到测试包继续开发,结果发现,又得把正式包卸载了然后装个测试包。

这一来二去的多麻烦呀~

怎么解决呢,有人说,我手里头有两台测试机,一台装正式包,另一台装测试包。我想说,陈独秀同学,你先坐下,咱大多数人都只有一台测试机呀。

那么,问题来了,怎么实现一台手机上同时安装正式包和测试包呢。这就是本文要解决的问题。

2. 实现一台手机上同时安装正式包和测试包

我们知道,Android 应用的唯一标识是包名,也就是 build.gradle 里的 applicationId。在一台手机上不允许安装的两个包的唯一标识重复。因此,只需要把测试包的 applicationId 亦即包名改一下就好了~

2.1 修改测试包包名

查阅文档之后发现,Android 官方对这种场景早有支持,只需要在 app/build.gradle 的 android->buildTypes->debug 节点下面设置 applicationIdSuffix 即可,示例如下:

android {
 // ...

 buildTypes {
  debug {
   minifyEnabled false
   applicationIdSuffix ".test"   // 测试包增加包名后缀
  }
  release {
   // ...
  }
 }

 //...
}

2.2 问题来了~编译失败

事情往往不会这么简单,在我修改完 app/build.gradle 之后,sync 一下,发现,编译失败了,译失败了,失败了,败了,了。。。

错误日志如下:

[...]
:app:compileDebugJavaWithJavac
error: The generated com.xxx.xx.test.R class cannot be found

咋办,不知道咋回事儿,看起来像是 AndroidAnnotation 的锅。面向搜索引擎编程,经过一番搜索,发现了这个:Using a debug "applicationIdSuffix" causes compilation errors #1888。

2.3 问题解决

具体解释参见上述 issue,贴一下解决办法。在 android->defaultConfig 下增加 javaCompileOptions 配置:

javaCompileOptions {
 annotationProcessorOptions {
  arguments = [
   "resourcePackageName": android.defaultConfig.applicationId
  ]
 }
}

resourcePackageName 这个参数是 AndroidAnnotations 定义的,关于它的具体含义可以参考 这里
Last

So,终于可以在一台手机上同时安装正式包和测试包了~~

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • 实现android应用程序自动化测试的批处理脚本

    测试平台:兼容android所有平台(2.3-4.2) 测试背景:由于需要对产品的SDK做接口测试,而这些接口需要在app里面调用,故开发了一个简单的android应用(如图),用来调用需要测试的接口,app中的每个按钮其实都是一个测试模块. 测试需求: 1.由于某些接口在程序第一次安装打开时调用,需要实现自动化安装打开关闭卸载测试,可设置重复次数. 2.由于需要测试接口的稳定性,每个按钮每天都要跑多篇,所以实现简单点击的UI自动化,循环点击. 3.自动检查收集logcat日志并解析日志结果:自

  • Android编程之蓝牙测试实例

    本文实例讲述了Android编程之蓝牙测试.分享给大家供大家参考.具体分析如下: 一.软件平台: win7 + eclipse + sdk 二.设计思路: 配合倒计时定时器实现蓝牙打开,可见,扫描三个功能 三.源代码: main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/re

  • android模拟器开发和测试nfc应用实例详解

    从Android2.3开始支持NFC.不过NFC应用只能在Android手机(或平板电脑)上测试和开发,而且Android手机还必须有NFC芯 片.而且如果测试NFC传输文件时至少需要两部支持NFC的手机.当然,如果测试读写NFC标签,还需要一些NFC标签或帖子.而且NFC在模拟器上时不能运行的.所以从这一点来说,NFC开发需要更多的设备,比较麻烦.这也蓝牙.传感器是一样的.都不能在Android模拟器上开发和测试.真不知道Google为什么不解决这一问题. 不过这种问题也不是不能解决,而且并不

  • Android触屏测试实例代码

    本文实例详细描述了Android触屏测试代码,可实现对触屏的点击.移动.离开等事件的处理,对于Android初学者有很好的借鉴价值. 具体功能代码如下: package com.test; import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.MotionEvent; import

  • Android 测试入门篇

    Android构架 1. Application 应用程序层:用Java语言编写的运行在虚拟机的程序 用户直接使用的功能,其基本应用比如:电话.联系人.短信.邮件等,还有无数第三方应用. 2. Application Framework 应用架构层:编写Google发布的核心应用程序的API框架 开发应用程序使用的基础组件,相当于供应用程序调用的API.Java开发,包括:丰富的界面控件.Content Provider,数据存储组件,应用程序可以通过Content Provider分项数据给其

  • Android自动测试工具Monkey

    前言: 最近开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey.Monkeyrunner.benchmark.其它test tool等等.因接触时间很短,很多地方有不足之处,希望能和大家多多交流. 一.Monkey定义 探索软件测试工具有哪些,本文主要介绍Monkey工具.Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动.按键等操作来对设备上的程序进行压力测

  • Android手机上同时安装正式包与测试包的方法

    1. 前言 Maybe 你会有这个烦恼,在开发的时候,测试突然告诉你,正式包上有点问题,需要看一下,这时候你打开测试机发现上面装的是测试包,没事,那就卸载了装个正式包呗.然后嘞,正式包的问题确认完了,发现不是 Bug,而是一个 Feature,你需要回到测试包继续开发,结果发现,又得把正式包卸载了然后装个测试包. 这一来二去的多麻烦呀~ 怎么解决呢,有人说,我手里头有两台测试机,一台装正式包,另一台装测试包.我想说,陈独秀同学,你先坐下,咱大多数人都只有一台测试机呀. 那么,问题来了,怎么实现一

  • Android编程判断手机上是否安装了某个程序的方法

    本文实例讲述了Android编程判断手机上是否安装了某个程序的方法.分享给大家供大家参考,具体如下: 1. 首先得到该程序的包名 这个连上手机ADB,看logcat就能看到.比如:QQ客户端的包名是com.tencent.mobileqq. 2. 然后通过PackageManager判断是否存在该包的程序 private boolean isPkgInstalled(String pkgName) { PackageInfo packageInfo = null; try { packageIn

  • Android开发中调用系统相册上传图片到服务器OPPO等部分手机上出现短暂的显示桌面问题的解决方法

    要原因是主体样式设置的问题:这里把appTheme设置一个style即可: <item name="android:windowBackground">@color/white</item> <!--下面这个属性很重要,有时候会出现某些机型在调用系统相册的时候,短暂的出现手机桌面现象--> <item name="android:windowIsTranslucent">false</item> <i

  • Android手机获取root权限并实现关机重启功能的方法

    本文实例讲述了Android手机获取root权限并实现关机重启功能的方法,是Android程序设计中非常常见的重要功能.现分享给大家,供大家在Android程序开发中参考之用. 具体功能代码如下: /* * 执行命令 * @param command * 1.获取root权限 "chmod 777 "+getPackageCodePath() * 2.关机 reboot -p * 3.重启 reboot */ public static boolean execCmd(String c

  • Ubuntu中为Android系统上实现内置C可执行程序测试Linux内核驱动程序

    在前一篇文章中,我们介绍了如何在Ubuntu上为Android系统编写Linux内核驱动程序.在这个名为hello的Linux内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是传统的设备文件/dev/hello.proc系统文件/proc/hello和devfs系统属性文件/sys/class/hello/hello/val.进一步,还通过cat命令来直接访问/proc/hello和/sys/class/hello/hello/val文件来,以验证驱动程序的正确性.在这一篇文章里,我

  • adb wireless进行Android手机调试详解

    今天电脑usb接口出问题了,就想着可不可以通过wifi连上手机,然后进行eclipse调试,看logcat等等. 网上搜了一下,果然有这种解决方案. 现在分享给各位android小伙伴. 前提:需要你的windows电脑已经安装了android sdk. 步骤: 1.关键的东东是需要在你的android手机上安装一个神奇的软件:Adb Wireless 2.在你的手机上安装成功后,图标如图: 3.进入该app,界面如下,点击中间那个很大的按钮,下方会出现连接信息: 4.你需要确保adbWirel

  • 浅谈Android手机的抢红包插件

    前语 最近,Android手机上的手机管家更新了新版本,提供了红包闹钟功能,只要有微信红包或者QQ红包,就会自动提醒.恰逢最近又在做UI自动化的工作,使用到UI Automator框架.几行代码,就可以让手机自动完成某些操作,很有意思,今天就来扒一扒这背后的原理. UI Automator 传统的手工测试,我们需要点击一些控件元素,来查看输出的结果是否符合预期.比如在登录界面,输入正确的用户名和密码,点击登录按钮后,就可以正常登录. 如果这些操作,每一次都需要手工执行的话,是需要大量的人力成本的

  • Android Studio 3.3.2 正式版的安装教程图解

    第一步:在d盘新建android文件夹,在此文件夹中再建三个子文件夹,Android Studio . Android_SDK.Android Project : 第二步:下载 android-studio-ide-182.5314842-windows.exe,随便下到什么位置都可以. 第三步:双击运行 点 next 下面是修改后的图 慢慢等吧,让他进度条跑完. 右下角的进步条跑完后,对于有的机子有可能会出错, 并且出错的情况是大多数.那是因为你的SDK没有下载好,或工程的配置没有做好. 如果

  • Android手机抓包步骤

    android抓包准备 1. Android手机需要先获得root权限.一种是否获得root权限的检验方法:安装并打开终端模拟器(可通过安卓市场等渠道获得).在终端模拟器界面输入su并回车,若报错则说明未root,若命令提示符从$变#则为rooted:2. 如果Android手机尚未root,可通过superoneclick或其它方法进行root处理(需要先安装Microsoft .NET Framework).Superoneclick刷root权限教程:(http://soft.shouji

  • Android开发之APP安装后在桌面上不显示应用图标的解决方法

    本文实例讲述了Android开发之APP安装后在桌面上不显示应用图标的解决方法.分享给大家供大家参考,具体如下: 一.问题: 前几天在写项目的时候运行的时候突然Android桌面上没有了应用图标,但是应用里面下载的应用有.调试版本和发布正式的版本都没有,之前以为是因为用了不同的keystore发布了两个不同的正式版本造成的问题.后来在看别人的文章才知道是什么问题. 二.分析: 原因就是activity中的intent-filter用了不同的data和action属性.intent-filter必

随机推荐