【原创】如何使用build.gradle优雅的开发Android
2017-09-08 12:00
751 查看
前言
Gradle 是 Android 现在主流的编译工具,他和 Android Studio 的关系非常紧密,可以说对于一些简单的程序我们几乎不需要任何代码上的配置只使用 Android Studio 就可以完成编译和运行。 下面我给大家介绍一些实用的gradle代码:
1.打包签名apk
大家在使用gradle时,最基本的就是签名打包,下面的代码配置好之后,就可以根据渠道和release或者debug包了:(1)替换AndroidManifest中的占位符
替换AndroidManifest 的app_lable ,也就是应用名android{ defaultConfig{ manifestPlaceholders = [app_label:"@string/app_name"] } }
如果只想替换debug版本:
android{ buildTypes { debug { manifestPlaceholders = [app_label:"@string/app_name_debug"] } release { } } }
更多的需求是替换渠道编号:
android{ productFlavors { // 把dev产品型号的apk的AndroidManifest中的channel替换dev "dev"{ manifestPlaceholders = [channel:"dev"] } } }
(2)配置签名信息
在builde.gradle 的android{..} 里面将签名设置signingConfigs { release { storeFile file("../yourapp.keystore") storePassword "your password" keyAlias "your alias" keyPassword "your password" } } buildTypes { debug { minifyEnabled false zipAlignEnabled false shrinkResources false } release { minifyEnabled true//混淆编译 zipAlignEnabled true //移除无用的资源文件 shrinkResources true signingConfig signingConfigs.release proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
( 3 ) 多渠道打包,下面引用友盟的例子:
首先在AndroidManifest 里面配置PlaceHolder,与build.gradle文件中替换自己想要改变的值
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" /> 然后在build.gradle里面设置productFlavors,修改PlaceHolder
productFlavors { playStore { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"] } miui { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "uc"] } wandoujia { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] } } 这里也是可以批量修改的
productFlavors { playStore {} miui {} wandoujia {} } //批量处理 productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] }
(4)修改打包的文件名字,根据不同的需求自行配置
def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) }
android.applicationVariants.all { variant -> variant.outputs.all { if(variant.buildType.name=="release"){ outputFileName = "${sdk}_${defaultConfig.versionName}_${releaseTime()}.apk" }else { outputFileName = "${sdk}_${defaultConfig.versionName}_${releaseTime()}_debug.apk" } } }
2.动态应用皮肤
有时我们运营需求就是把app 换皮肤,换icon,更换域名等等原因,应用名重新在应用市场里面发布,如果手动去搞未免显的很Low 也比较费时费力,其实Gradle 里面已经给我们提供了方法,我们可以根据需求建立多套assets ,res,和AndroidMainfest
(1)提取工程中,strings,colors,dimens,在开发阶段有时为了求快,经常忘记了这么做,这就是开发习惯的问题了,其实这是给自己在后面的阶段埋了坑
![](http://blog.vaf.cn/wp-content/uploads/2017/09/%E7%B2%98%E8%B4%B4%E5%9B%BE%E7%89%87.png)
(2) 将assets, res ,AndroidManifest 所有东西抽取到一个特定的文件夹
本人就是在src下面建立了一个同级的src_config文件夹,该文件夹下面的子文件的名字就是对应每一套的打包需求,我的示例打包需求是“dataEye”和“noDataEye”,如下图所列
![](http://blog.vaf.cn/wp-content/uploads/2017/09/%E7%B2%98%E8%B4%B4%E5%9B%BE%E7%89%871.png)
(3)配置build.gradle文件
首先在工程project的build.gradle 里面配置 ,ext{ sdk='dataEye' // 对应文件夹里面的打包需求 // sdk='noDataEye' }
然后在app module里面的build.gradle 里面,引用assets ,res ,AndroidManifets就可以了
def appId="com.anfeng.demo.${sdk}" // 对应的applicationId def manifestXml="src_config/${sdk}/AndroidManifest.xml" def assetsPath="src_config/${sdk}/assets" def resDir="src_config/${sdk}/res"
android.sourceSets{// 设置引用路径 main{ manifest.srcFile manifestXml res.srcDirs=[resDir] assets.srcDirs assetsPath } }
完成几步之后,有几套打包需求我们就建几套相应资源就可以了,这就算是初步完成了换肤的需求
相关文章推荐
- 【原创】如何使用build.gradle优雅的开发Android
- 如何优雅的使用Retrofit、Rxjava、Butterknife、Material开发一款MVP模式的新闻+天气预报+妹子的Android app
- [Gradle] 如何在android项目中对纯Java module使用release/debug build并启用proguard
- android开发之使用gradle终端下build项目
- build.gradle使用详解(android stutio开发须知)
- 如何使用Android SDK开发Android应用?
- 【Android游戏开发二十一】Android os设备谎言分辨率的解决方案!以及简单阐述游戏引擎如何使用!
- Android开发中使用Eclipse创建工程后提示The project cannot be built until build path errors are resolved问题的解决方法
- 如何使用android的ndk建立native的开发环境
- android中如何开发用户控件(使用已有控件组合而成的控件,非用户视图)
- 如何使用Android SDK开发Android应用?
- Android 软件开发之如何使用Eclipse Debug调试程序详解(十二)
- Android开发之:如何使用样式和主题
- 如何使用Android SDK开发Android应用
- Android 软件开发之如何使用Eclipse Debug调试程序详解(十二)
- 原创:Android应用开发记录-Andorid歌词秀(3)使用的Service的音频播放器
- 如何使用Android SDK开发Android应用
- 如何使用Android SDK开发Android应用?
- 如何使用android的ndk建立native的开发环境
- 如何使用android的ndk建立native的开发环境