Android进阶之Gradle的高级用法
2017-08-30 13:38
781 查看
1 基础知识
1.1 productFlavors
gradle中有一个功能叫做变体「productflavors」,这是来为APP设置不同的打包配置,以实现多渠道打包的一种方案。android { productFlavors { baidu { } _360 { } yingyongbao { } }
1.2 buildTypes
gradle中打包编译类型「buildTypes」,主要区分:debug和release类型。android { buildTypes { debug { } release { } }
1.3 结果
(1)这样的话最后打包的时候就可以生成9种包:· baiduDebug · baiduRelease · _360Debug · _360Release · yingyongbaoDebug · yingyongbaoRelease
(2)在Android Studio左下角可以找到并在每次build的时候选择不同种类的包:
2 实现分渠道配置
2.1 配置java变量
(1)在gradle中有一个功能叫「buildConfigField」,可以在系统的buildconfig中设置一个值。如下:public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("true"); public static final String APPLICATION_ID = "org.guan.demo"; public static final String BUILD_TYPE = "debug"; public static final String FLAVOR = "baidu"; public static final int VERSION_CODE = 1; public static final String VERSION_NAME = "1.0.0"; }
(3)使用
Logger.DEBUG = BuildConfig.DEBUG; public static final String flavor = BuildConfig.FLAVOR;
2.2 配置manifest变量
(1)很多第三方sdk喜欢在manifest中配置appkey等,可以在gradle中使用:manifestPlaceholders = [UMENG_CHANNEL: "0",UMENG_APPKEY : "123456789"]
(2)然后在manifest中配置:
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL}" /> <meta-data android:name="UMENG_APPKEY" android:value="${UMENG_APPKEY}" />
(3)配置包名
在gradle中包名用applicationId代表。
defaultConfig { applicationId "com.guan.demo" } yingyongbao { applicationId "com.guan.demo.majia" }
(4)配置版本号
yingyongbao { versionCode 1 versionName "1.0.0" }
3 实战
apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion '25.0.2' dexOptions { javaMaxHeapSize "4g" } sourceSets { main { jniLibs.srcDirs = ['libs'] //打包so库 } } defaultConfig { minSdkVersion 15 applicationId "com.guan.demo" multiDexEnabled true manifestPlaceholders = [CHANNEL_NAME: "baidu", EXECUTE_FLAG: "true", EXECUTE_ADV_FLAG: "true"] dependencies { debugCompile files('libs/AppOffer_2.4.3_newsensenetworks.jar') debugCompile files('libs/Baidu_MobAds_SDK.jar') } ndk { // 设置支持的 SO 库构架 abiFilters 'armeabi', 'armeabi-v7a', 'x86'// , 'arm64-v8a', 'x86_64', 'mips', 'mips64' } } buildTypes { debug { buildConfigField "boolean", "LOG_DEBUG", "true" } release { buildConfigField "boolean", "LOG_DEBUG", "false" } } productFlavors { baidu { buildConfigField "boolean", "yingyongbao", "false" manifestPlaceholders = [CHANNEL_NAME: "umeng", UMENG_KEY:"1",UMENG_SECRET:"123456", EXECUTE_FLAG: "true"] dependencies { baiduCompile files('libs/AppOffer_2.4.3_newsensenetworks.jar') baiduCompile files('libs/Baidu_MobAds_SDK.jar') } } _360 { buildConfigField "boolean", "yingyongbao", "false" manifestPlaceholders = [CHANNEL_NAME: "umeng", UMENG_KEY:"2",UMENG_SECRET:"123456", EXECUTE_FLAG: "false"] dependencies { provided files('libs/AppOffer_2.4.3_newsensenetworks.jar') provided files('libs/Baidu_MobAds_SDK.jar') } } yingyongbao { buildConfigField "boolean", "yingyongbao", "true" versionCode 100 versionName "1.0.0" applicationId "com.guan.demo.majia" manifestPlaceholders = [CHANNEL_NAME: "umeng", UMENG_KEY:"2",UMENG_SECRET:"123456", EXECUTE_FLAG: "false"] dependencies { provided files('libs/AppOffer_2.4.3_newsensenetworks.jar') provided files('libs/Baidu_MobAds_SDK.jar') } } } } dependencies { compile project(':Downloader') compile files('libs/umeng_social_sdk.jar') } repositories { mavenCentral() jcenter() flatDir { dirs 'libs' } }
4 更高级的实战:不同的APP名称/图标/UI等
相关文章推荐
- Android Gradle高级用法,动态编译技术:Plugin Transform Javassist操作Class文件
- Android开发中Gradle的高级用法
- Android开发中Gradle的高级用法
- Android开发中Gradle的高级用法---productflavors, buildTypes
- Android技术之 必备而又容易忽视的知识 Gradle的高级用法
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- Android中的自绘View的那些事儿(八)之 Paint的高级用法
- 【我的Android进阶之旅】解决Android Studio 运行gradle命令时报错: 错误: 编码GBK的不可映射字符
- Android高级进阶 - 动画之逐帧动画(Frame Animation)
- Gradle for Android-高级Build和自定义
- 《Android 高级进阶》 --> APP 整体框架
- Android Log高级用法
- [置顶] Android开发之Path的高级用法用贝塞尔曲线绘制波浪线
- 【Android进阶】文本切换器(TextSwitcher)的功能与用法(自动切换仿京东淘宝快报效果)
- Android开发高级进阶——多进程间通信
- Android高级之xUtils框架(一):ViewUtils的用法
- Android高级用法之attrs使用
- Android开发高级进阶(二)—多线程(实现简单下载器)
- AndroidStudio使用进阶三: 重新认识AndroidStudio&Gradle
- Android Data Binding 高级用法