美文网首页
Android实现同时安装测试环境与生产环境包,及区分app名和

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

作者: 玉寒_99cf | 来源:发表于2020-05-07 17:04 被阅读0次

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

    第一步:在项目的build.gradle增加
    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名及图标,那么你可能需要如下操作了:
    第二步:
    <provider
    android:name="com.huawei.hms.update.provider.UpdateProvider"
    android:authorities="{applicationId}.hms.update.provider" android:exported="false" android:grantUriPermissions="true" /> <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.build文件

    buildTypes {
    release {
    ...

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

    第三步:

    <application
    android:name=".application.SampleApplication"
    android:allowBackup="true"
    android:appComponentFactory="任意值"
    android:hardwareAccelerated="true"
    android:icon="{icon}"//重点 android:label="{name}"//重点
    android:largeHeap="true"
    android:supportsRtl="true"
    android:testOnly="false"
    android:theme="@style/AppTheme"
    tools:replace="android:label,android:icon">//重点

    效果: HC9`%R%]N098%BT%UBC98`M.png

    注意:1.这样包名会增加.debug所以使用包名的地方请注意
    2.定义变量
    buildTypes {
    release {
    buildConfigField "boolean", "debug", "true"
    }
    debug {
    buildConfigField "boolean", "debug", "false"
    }
    }
    获取BuildConfig.debug

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/cmxaghtx.html