Android 一台手机同时安装正式包和测试包

2019-05-29  本文已影响0人  静夜思亲

Android 在同一台手机上同时安装 正式包 和 测试包

要想使同一项目的不同环境下的apk安装在同一台手机上,它们的包名即applicationID一定不同。

  1. 修改app名称以区别apk的环境
    • 删除res->values->strings <string name="app_name">XXXX</string>
  2. 使用 productFlavors 为不同环境分配不同属性, 在 app 下的buildGradle 中 android { } 添加 productFlavors
     productFlavors{
       //开发环境
       zhengshi {
           applicationId 'xxx.xxx.xxxx'//你的正式环境下的applicationID
           manifestPlaceholders = [ application_id :"xxx.xxx.xxxx"]
           buildConfigField 'String', 'BASE_URL', '"http://xxx.xxx.xxxx"' //正式环境下的网络请求基地址
           resValue "string", "app_name", "XXX"//正式环境下app名称
       }
       //测试环境
       ceshi {
           applicationId 'xxx.xxx.xxxx'//你的测试环境下的applicationID
           manifestPlaceholders = [ application_id :"xxx.xxx.xxxx"]
           buildConfigField 'String', 'BASE_URL', '"http://xxx.xxx.xxxx'////测试环境下的网络请求基地址
           resValue "string", "app_name", "XXX_测试"//正式环境下app名称
       }
    }
    
    • applicationId 'xxx.xxx.xxxx' , 即修改不同环境下的包名
    • buildConfigField 'String', 'BASE_URL', '"http://xxx.xxx.xxxx"' ,动态设置app网络请求基地址,取值方式:
      BuildConfig.BASE_URL
    • resValue "string", "app_name", "XXX",动态在strings资源文件下添加 app_name=XXX,在清单文件中
      同样可以通过 android:label="@string/app_name" 获取名称。
  3. 如果你的项目中适配了 Android7.0 的fileProvider,一定要同时修改清单文件中 provider 下的android:authorities值
         <provider
                android:name="android.support.v4.content.FileProvider"
                android:authorities="${application_id}.fileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/file_paths_public" />
          </provider>
    
    • 如果两个app的provider 下的 android:authorities 值相同,那么它们也不能安装在同一台手机上。
    • 使用applicationID作为authorities 的部分,因为applicationId不同那么 authorities 一定不同,
    • 使用${application_id} 在打不同包的时候动态更换application_id的值。
    • manifestPlaceholders = [ application_id :"xxx.xxx.xxxx"] 即修改清单文件中${application_id} 的值。
  4. 修改完毕后 build 项目。
上一篇 下一篇

猜你喜欢

热点阅读