美文网首页安卓开发博客Android知识Android开发
Android 使用Gradle实现同时安装debug版本与re

Android 使用Gradle实现同时安装debug版本与re

作者: 姚瑶大坏蛋 | 来源:发表于2016-09-09 18:24 被阅读1961次

    我相信大家在开发中,肯定遇到过这种情形:

    就是在开发工程中,使用的是debug环境,有时候会想看一下生产环境的数据,这时候还得删除当前的debug版本,再安装正式的包。

    为了解决这个问题,为了方便内测,就要实现一个手机可以同时安装一个debug包,一个release包。

    这个时候不得不感叹Android studio+Gradle强大,一下是实现步骤:

    1.在app的build.gradle 中添加 applicationIdSuffix '.debug';具体如下:

    android {
        compileSdkVersion 24
        buildToolsVersion "24.0.2"
        defaultConfig {
            applicationId 'com.yaoyao.demo'
            minSdkVersion 14
            targetSdkVersion 22
            versionCode 0010100
            versionName "0.1.1.0"
         }
        
        buildTypes {
            debug {
                applicationIdSuffix '.debug'
            }
        }
    

    这样在运行时你的包名就会加上.debug

    2.在AndroidManifest.xml中,有的第三方SDK会要求写包名,比如个推,在申请权限是要求写入包名:

    <uses-permission android:name="getui.permission.GetuiService.com.yaoyao.demo" />
    

    为了可以动态的读取包名,改为一下写法:

    <uses-permission android:name="getui.permission.GetuiService.${applicationId}" /> 
    

    3.如果你使用了融云IM,在AndroidManifest.xml中需要写:

    <activity
       android:name=".controller.im.ChatActivity"
       android:exported="false"
       android:screenOrientation="portrait">
       <intent-filter>
          <action android:name="android.intent.action.VIEW" />
          <category android:name="android.intent.category.DEFAULT" />
          <data
              android:host="@string/rong_intent_host"
              android:pathPrefix="/conversation/"
              android:scheme="rong" />
        </intent-filter>
     </activity>
    

    类似于这种需要在host里面写包名的,可以用@string来代替,实现动态获取包名。

    这个时候问题来了,如果strings文件没有区分debug和release,那还是每次都得修改这个。因为我懒,又找到了对应的解决办法:

    解决办法:

    在src下面新建一个debug文件夹,下面建一个drawable-xxhdpi 和values,strings.xml定义如下:

    屏幕快照 2016-09-09 18.14.40.png
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="app_name">Beta版</string>
        <string name="rong_intent_host">com.yaoyao.demo.debug</string>
    </resources>
    
    

    这样应该基本可以解决同时安装的问题了。
    啊哈哈哈,好开心啊~~~

    突然想到,在代码中也有可能使用到包名,还是为了解决动态读包名的问题,可以使用BuildConfig.APPLICATION_ID来代替包名

    相关文章

      网友评论

      本文标题:Android 使用Gradle实现同时安装debug版本与re

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