一键快速切换开发环境以及多渠道打包
ChangeEnvironment
一键快速多渠道打包常用配置
sky8650/ChangeEnvironment
关于打包
在开发用户端项目的时候经常会遇到开发,测试,正式等环境的来回切换,从而需要切换接口的地址以及不同环境的配置!比方我们需要判断当前的环境是正式还是开发环境以此来加载不同的推送ID!当然我们可以写一个配置文件,每次打包时注释掉不需要的代码。 但这样做常常会有以下几个问题
不安全,由于是手动注释,不可避免的发生人为的失误
重复的工作,每次都要打开配置文件白费时间
添加代码量,而且不优雅
配置环境几乎是新建项目必做的工作,主要分为以下几个步骤
配置manifest中的占位符
配置gradle的各种环境信息。例如能否需要混淆,读取不同的签名等
配置多渠道打包
配置并读取签名文件信息
通过代码读取环境信息并进行判断
输出当前渠道环境下的apk文件
配置步骤
第一步:配置manifest中的占位符
<meta-data android:name="server_mode" android:value="${SERVER_MODE}"/>
第二步:配置manifest中的环境信息
buildTypes { release { debuggable false//能否调试模式 signingConfig signingConfigs.release//签名配置 zipAlignEnabled false//能否压缩 minifyEnabled false//能否混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' manifestPlaceholders = [SERVER_MODE: "RELEASE"]//mainfest的占位符 buildapkName() } _test { debuggable true//能否调试模式 signingConfig signingConfigs.release//签名配置 zipAlignEnabled false//能否压缩 minifyEnabled false//能否混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' manifestPlaceholders = [SERVER_MODE: "TEST"]//mainfest的占位符 buildapkName() } }
第三步:配置多渠道打包(假如不需要多渠道打包,此步骤可省略)
//多渠道配置 productFlavors { _360shouzhu { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"] } ali { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "ali"] } oppo { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "oppo"] } xiaomi { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"] } } // productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] }
第四步:配置并读取签名文件信息
signingConfigs { release { storeFile storePassword keyAlias keyPassword } } //读取签名配置文件,为保证安全配置文件可放在本地磁盘中def getSigningProperties() { def propFile = file('signing.properties') if (propFile.canRead()) { def Properties props = new Properties() props.load(new FileInputStream(propFile)) if (props != null && props.containsKey('STORE_FILE') && props.containsKey('STORE_PASSWORD') && props.containsKey('KEY_ALIAS') && props.containsKey('KEY_PASSWORD')) { android.signingConfigs.release.storeFile = file(props['STORE_FILE']) android.signingConfigs.release.storePassword = props['STORE_PASSWORD'] android.signingConfigs.release.keyAlias = props['KEY_ALIAS'] android.signingConfigs.release.keyPassword = props['KEY_PASSWORD'] } else { println 'signing.properties found but some entries are missing' android.buildTypes.release.signingConfig = null } } else { println 'signing.properties not found' android.buildTypes.release.signingConfig = null }}
第五步:读取环境信息,并进行判断
/** * 获取metaData * @param context * @param metaKey * @return */ public static String getMetaValue(Context context, String metaKey) { Bundle metaData = null; String apiKey = null; if (context == null || metaKey == null) { return null; } ''''''省略 return apiKey; } /** * 获取当前的环境 * @param context */ public static void init( Context context) { USE_SERVER_MODE = Enum.valueOf(Mode.class, DeviceUtil.getMetaValue(context, "server_mode")); }
第六步: 输出apk文件
//生成文件的名称def buildapkName(){ android.applicationVariants.all { variant -> variant.outputs.all { output -> if (outputFile != null && outputFile.name.endsWith('.apk')) { def fileName = "evn_${variant.productFlavors[0].name}_${variant.buildType.name}.apk" outputFileName = new File(fileName) } } } }
附命令行打包
//oppo渠道下的正式环境gradlew assembleoppoRelease//oppo渠道下的测试环境gradlew assembleoppo_test//全渠道正式包gradlew assembleRelease//全渠道测试包gradlew assemble_test
至此,假如再需要打不同的环境安装包只要要一行命令就可完成
全文纯手工编写,假如您感觉对您有帮助请动动小手点个star哦!假如有任何问题或者者意见可在下方留言
sky8650/ChangeEnvironment
image
image
+qq群:853967238。获取以上高清技术思维图,以及相关技术的免费视频学习资料
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 一键快速切换开发环境以及多渠道打包
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 一键快速切换开发环境以及多渠道打包