如果你不够懒,那么,你就做不好一个程序员。
不说废话,先直接说怎么做吧。
友盟多渠道打包
1.首先是在AndroidManifest.xml里面添加最下面一段:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="me.pfcstyle.helloword">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
<!--这里 -->
<meta-data
android:name="UMENG_CHANNEL"
android:value="{UMENG_CHANNEL_VALUE}" />
</manifest>
里面的{UMENG_CHANNEL_VALUE}就是渠道指示,我们配置为PlaceHolder,这样可以在build.gradle里设置productFlavors,从而让其在编译时自动变化。
2.在build.gradle设置productFlavors
productFlavors {
xiaomi {}
_360 {}
baidu {}
wandoujia {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
或者这样写也是一样的:
productFlavors {
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
_360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
}
如果你想确认一下你的productFlavors是否添加成功了,你可以通过下图验证:
然后命令行定位到你的项目的根目录,执行./gradlew assembleRelease,然后就可以静静的等待各渠道打包完成了。
一些可能的问题
如果你在执行./gradlew 的时候,提示你要下载类似gradle-2.10-all(这个版本可能不同),这个下载比较慢,而且你会发现每一个工程都要安装,这本就很不合理,看解决方法!
去官网下载对应版本的gradle-v-all.zip,然后到工程根路径->gradle->wrapper下找到gradle-wrapper.properties,编辑最后一行的
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
//更改为
distributionUrl=gradle-2.10-all.zip
然后将你下载好的zip包放到工程根路径->gradle->wrapper下,如图:
好了,再去执行gradlew -v ok啦,显示如下图:
除此之外 assemble 还能和 Product Flavor 结合创建新的任务,其实 assemble 是和 Build Variants 一起结合使用的,而 Build Variants = Build Type + Product Flavor , 举个例子大家就明白了:
如果我们想打包wandoujia渠道的release版本,执行如下命令就好了:
./gradlew assembleWandoujiaRelease 如果我们只打wandoujia渠道版本,则:
./gradlew assembleWandoujia 此命令会生成wandoujia渠道的Release和Debug版本
同理我想打全部Release版本:
./gradlew assembleRelease 这条命令会把Product Flavor下的所有渠道的Release版本都打出来。
Gradle管理依赖
gradle最常用的还是管理依赖吧,看看有多简单:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1'
testCompile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support:support-annotations:23.4.0'
}
直接执行上述的编译,gradle就会自动帮你下载添加到依赖,根本不用管了。这在我们使用第三方的时候就会非常方便,一句话,所有需要的jar包什么的都有了。
Gradle依赖的统一管理
那么,嘿嘿,更简单的来了,下面说一下依赖的统一管理方式。
统一一个依赖管理文件
你要先自己创建一个config.gradle文件来统一管理你的依赖和其他系统版本这些参数,注意,这个文件不是属于某一个工程的,而是属于你个人或者公司的维护的文件,在你的工程中只是引用它。
ext {
android = [compileSdkVersion: 23,
buildToolsVersion: "23.0.2",
applicationId : "me.storm.ninegag",
minSdkVersion : 14,
targetSdkVersion : 22,
versionCode : 2,
versionName : "1.1.0"]
dependencies = ["support-v4" : 'com.android.support:support-v4:23.1.1',
"appcompat-v7" : 'com.android.support:appcompat-v7:23.1.1',
"design" : 'com.android.support:design:23.1.1',
"cardview-v7" : 'com.android.support:cardview-v7:23.1.1',
"recyclerview-v7" : 'com.android.support:recyclerview-v7:23.1.1',
"multidex" : "com.android.support:multidex:1.0.+",
"butterknife" : 'com.jakewharton:butterknife:7.0.1',
"volley" : 'com.mcxiaoke.volley:library:1.0.19',
"okhttp" : 'com.squareup.okhttp:okhttp:2.7.0',
"okhttp-urlconnection" : 'com.squareup.okhttp:okhttp-urlconnection:2.7.0',
"leakcanary" : 'com.squareup.leakcanary:leakcanary-android:1.3.1',
"glide" : 'com.github.bumptech.glide:glide:3.6.1',
"glide-okhttp-integration" : 'com.github.bumptech.glide:okhttp-integration:1.3.1',
"foldable-layout" : 'com.alexvasilkov:foldable-layout:1.0.1',
"etsy-grid" : 'com.etsy.android.grid:library:1.0.5']
}
上面是我的config.gradle文件,你们放你们需要的依赖以及配置其他的参数。
如何引用?
如下图:
只需在最顶部加上上面一行代码,意思就是所有的子项目或者所有的modules都可以从这个配置文件里读取内容。
最后在到app目录下的build.gradle文件里看下具体如何读取的呢?
android节点下的读取:
denpendencies节点下的读取:
参考博客:Gradle依赖的统一管理
文档信息
- 本文作者:Yawei Wang
- 本文链接:https://pfcstyle.github.io/2016/05/26/Android-Studio4-Gradle/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)