Android实现同时安装测试环境与生产环境包,及区分app名和图标

简介: 众所周知,相同包名的APP,是不能同时安装的,但是我们实际开发中,测试同学往往在测试环境没问题,上了生产环境,却发现了bug,这时候就只能卸载生产环境的包,再去安装测试环境。

***Android***实现同时安装测试环境与生产环境包

众所周知,相同包名的包名的APP,是不能同时安装的,但是我们实际开发中,测试同学往往在测试环境没问题,上了生产环境,却发现了bug,这时候就只能卸载生产环境的包,再去安装测试环境。如果没有开发流程中缺少自动化打包或者测试同学不保存蒲公英二维码,这时候就会产生多余时间成本。那么有没有一种可能,同时安装测试与生产环境的包呢?

这个当然是可以的,我们更换包名就行了,Android Studio早已为我们准备了相应的操作:

很简单,就一句,给你的app, buildTypes -debug下面增添加如下代码:

applicationIdSuffix ".debug"

相当于在打包时,会为debug的包原包名后增加 .debug.

实际代码演示

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            debuggable true
            zipAlignEnabled true  //是否支持zip
            resValue("string", "ENVIRONMENT", "RELEASE")
            buildConfigField "boolean", "LOG_DEBUG", "false"
            resValue "string", "name", "release"
            resValue "int", "logo", "release"
            signingConfig signingConfigs.release
        }
        debug {
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            minifyEnabled false
            zipAlignEnabled true
            debuggable true
            applicationIdSuffix ".debug"
            resValue("string", "ENVIRONMENT", "DEBUG")
            resValue "string", "name", "debug"
        }
    }

以上操作适用于大部分同学,但如果你的APP中含有 ContentProvider或者FileProvider(Android7.0文件适配必备),也就是和包名相关的;或者你想更直接点,直接区分测试与生产的app名及图标,那么你可能需要如下操作了:

常见问题

APP含有ContentProvider

实际场景:华为推送
<provider
            android:name="com.huawei.hms.update.provider.UpdateProvider"
            android:authorities="com.test.app.hms.update.provider"
            android:exported="false"
            android:grantUriPermissions="true" /> <!-- 应用下载服务 -->

当我们的项目中包含华为push时,往往会有如上代码,此时如果不处理包名,就会出现同时只能安装一个APP,否则adb就会提示 com.huawei.hms.update.provider.UpdateProvider 已存在(使用adb命令,adb install …apk 这样会详细提示)。

处理方式:

       <provider
            android:name="com.huawei.hms.update.provider.UpdateProvider"
            android:authorities="${applicationId}.hms.update.provider"
            android:exported="false"
            android:grantUriPermissions="true" /> 

APP含有FileProvider

实际场景:Android7.0文件适配
<provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />

适配也很简单,将 authorities="" 里的包名改为 ${applicationId} 即可

补充进阶

动态替换app名,图标

都到这一步了,那不如更友好点,让测试同学更好辨认:

修改app.build文件

 buildTypes {
        release {
            ...
            manifestPlaceholders = [icon: "@mipmap/logo",
                                    //这里也可以加入FileProvider的不同包名
                                    //例如: fileProvider: "com.petterp.release.provider"
                                    //根据自己的需求来定
                                    name: "生产环境"]
            ...
        }
        debug {
            ...
            manifestPlaceholders = [icon: "@mipmap/logo_debug",
                                    //这里也可以加入FileProvider的不同包名
                                    //例如: fileProvider: "com.petterp.debug.provider"
                                    //根据自己的需求来定
                                    name: "测试环境_debug"]
            ...
        }
    }

这里不同的配置,区分线上和测试。当然照葫芦画瓢,我们还可以定义更多测试与生产的不同数据,这个根据自己的需求即可。


然后修改AndroidManifest如下

image.png

效果如下:

image.png

好了,实现了,还是挺简单,是不是很直观了。

需要注意的地方

叮叮当

如果你的APP内含含有分享或者推送,那么测试版如果与线上用的是同一个appid与servert,那么测试版可能都会失败,当然这也很正常(如果不是同一个,自己处理下即可,怎么处理呢,楼下截图)。所以这点需要注意,逻辑上的功能都没什么问题。

如果不是同一个id,处理方式如下

同样是buildType下更改debug和release,分别对应的不同id,

  ...
  buildConfigField "String", "BaseUrl", "\"https://www.google.com/\""
  buildConfigField "String", "webUrl", "\"https://www.google.com/""
   buildConfigField "String", "wxAppid", "aasdadasdadadasda"

使用时如下:

class Test {
    fun test() {
        BuildConfig.webUrl
        BuildConfig.BaseUrl
    }
}

这样在打包时相应的id就会自动对应。省的自己判断了。

目录
相关文章
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
764 1
|
27天前
|
机器学习/深度学习 人工智能 算法
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
BALROG 是一款用于评估大型语言模型(LLMs)和视觉语言模型(VLMs)在复杂动态环境中推理能力的基准测试工具。它通过一系列挑战性的游戏环境,如 NetHack,测试模型的规划、空间推理和探索能力。BALROG 提供了一个开放且细粒度的评估框架,推动了自主代理研究的进展。
38 3
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
|
1月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
38 4
|
1月前
|
网络协议 关系型数据库 应用服务中间件
【项目场景】请求数据时测试环境比生产环境多花了1秒是怎么回事?
这是一位粉丝(谢同学)给V哥的留言,描述了他在优化系统查询时遇到的问题:测试环境优化达标,但生产环境响应时间多出1秒。通过抓包分析,发现MySQL请求和响应之间存在500毫秒的延迟,怀疑是网络传输开销。V哥给出了以下优化建议:
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
130 1
|
1月前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
3月前
|
JavaScript 测试技术 Windows
vue配置webpack生产环境.env.production、测试环境.env.development(配置不同环境的打包访问地址)
本文介绍了如何使用vue-cli和webpack为Vue项目配置不同的生产和测试环境,包括修改`package.json`脚本、使用`cross-env`处理环境变量、创建不同环境的`.env`文件,并在`webpack.prod.conf.js`中使用`DefinePlugin`来应用这些环境变量。
184 2
vue配置webpack生产环境.env.production、测试环境.env.development(配置不同环境的打包访问地址)
|
2月前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
81 1
|
2月前
|
前端开发 测试技术 程序员
在工作中会涉及到的几个环境(概念补充) 办公环境、开发环境、测试环境、线下环境、线上环境/生产环境都是什么,他们之间的关系?
本文解释了在职场中可能会接触到的不同环境,包括办公环境、开发环境、测试环境和生产环境(线上环境),以及它们之间的关系和重要性。
105 1
|
3月前
|
JavaScript 测试技术
vue配置生产环境.env.production、测试环境.env.development
该文章介绍了如何在Vue项目中配置和使用不同的环境变量文件(.env、.env.production、.env.development)以适应开发、测试和生产环境,并通过修改`package.json`中的scripts来实现不同环境的打包。
724 0
vue配置生产环境.env.production、测试环境.env.development

热门文章

最新文章