Android进阶之Gradle的高级用法
来源:互联网 发布:excel数据有效性设置跨 编辑:程序博客网 时间:2024/06/06 12:30
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等
阅读全文
0 0
- Android进阶之Gradle的高级用法
- Android开发中Gradle的高级用法
- Android开发中Gradle的高级用法
- Android技术之 必备而又容易忽视的知识 Gradle的高级用法
- Android开发中Gradle的高级用法---productflavors, buildTypes
- Android进阶之SharedPreferences的基本用法
- Gradle for Android 使用之旅之gradle配置进阶
- 菜鸟Android进阶之gradle依赖管理
- Gradle进阶用法整理
- Android高级进阶之自定义定义控件的属性
- 我的Android进阶之旅------>android:drawableLeft的用法
- Android DataBinding 的进阶用法
- Android高级之xUtils框架(四):DBUtils的用法
- Android高级之xUtils框架(一):ViewUtils的用法
- Android高级控件系列之ListView的用法
- android 高级之旅 (七) CoordinatorLayout 的基本用法
- Android高级之xUtils框架(四):DBUtils的用法
- 高级知识点之进阶
- webpack 学习总结
- c++ 如何获取系统时间
- 关于set global sql_slave_skip_counter=N 命令的解释
- HDU
- Maven中如何解决Cannot access central in offline mode?
- Android进阶之Gradle的高级用法
- 解决The SDK platform-tools version ((23)) is too old to check APIs compiled with API 23
- C++语言基础
- Spring Data(概述+hello world)
- [CSS] 常用技巧
- 统计`数组`元素出现的次数
- requests库入门-14-HTTP基本认证
- AngularJS快速上手
- 【bug记录】<a>标签IE下无法响应