├── README.md
├── build.gradle
├── libs.gradle
└── settings.gradle
/README.md:
--------------------------------------------------------------------------------
1 | gradle-eclipse-multi-channel-build
2 | ==================================
3 |
4 | 基于友盟的gradle多渠道打包工具的改进版本
5 |
6 |
专为Eclipse工程定制的多渠道多依赖项目的打包脚本
7 |
8 | ==================================
9 | 感谢友盟的多渠道打包工具:
10 | https://github.com/umeng/umeng-muti-channel-build-tool/tree/master/Gradle
11 |
12 | 我提交的版本主要修复以下问题:
13 | 1、次版本是为了适配Eclipse的多项目依赖工程的打包。
14 | 2、修复打包过程中文显示乱码问题。
15 | 3、修改apk的名字以及指定apk存放的文件夹。
16 | 4、增加签名的机制
17 |
18 | 使用方法:
19 | 1、将build.gradle和settings.gradle拷贝到目标工程下面,修改里面的路径、文件名等相关参数。
20 | 2、将lib.gradle拷贝到lib工程下面。注意:lib工程需要和root工程在同一目录,同级。如果不在同一目录清修改settings.gradle的设置
21 |
22 | 然后在目标root工程的下面运行命令:
23 | gradle -PSTOREPASS='你的keystore密码' -PKEYPASS='你的alias密码' clean --stacktrace
24 | gradle -PSTOREPASS='你的keystore密码' -PKEYPASS='你的alias密码' aR --stacktrace
25 |
26 |
27 | =================================
28 |
29 | Copyright infsafe 2014
30 |
31 | Licensed under the Apache License, Version 2.0 (the "License");
32 | you may not use this file except in compliance with the License.
33 | You may obtain a copy of the License at
34 |
35 | http://www.apache.org/licenses/LICENSE-2.0
36 |
37 | Unless required by applicable law or agreed to in writing, software
38 | distributed under the License is distributed on an "AS IS" BASIS,
39 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
40 | See the License for the specific language governing permissions and
41 | limitations under the License.
42 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 |
3 | repositories {
4 | mavenCentral()
5 | }
6 |
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:1.0.+'
9 | }
10 | }
11 |
12 | apply plugin: 'android'
13 |
14 | dependencies {
15 | compile fileTree(dir: 'libs', include: ['*.jar'])
16 | compile 'com.android.support:support-v4:+'
17 | //下面的是添加Eclipse的依赖工程
18 | compile project(':HorizontalVariableListView-master')
19 | compile project(':ListView_animotion/library')
20 | compile project(':MultiprocessPreferences-master')
21 | compile project(':PinterestLikeAdapterView-master')
22 | }
23 |
24 | android {
25 |
26 | compileSdkVersion 19
27 | buildToolsVersion "19.1.0"
28 |
29 | packagingOptions {
30 | exclude 'META-INF/DEPENDENCIES'
31 | exclude 'META-INF/notice.txt'
32 | exclude 'META-INF/LICENSE.txt'
33 | exclude 'META-INF/MANIFEST.MF'
34 | exclude 'META-INF/LICENSE'
35 | exclude 'META-INF/NOTICE'
36 | }
37 |
38 | defaultConfig {
39 | minSdkVersion 10
40 | targetSdkVersion 20
41 | }
42 |
43 | sourceSets {
44 | main {
45 | manifest.srcFile 'AndroidManifest.xml'
46 | java.srcDirs = ['src']
47 | resources.srcDirs = ['src']
48 | aidl.srcDirs = ['src']
49 | renderscript.srcDirs = ['src']
50 | res.srcDirs = ['res']
51 | assets.srcDirs = ['assets']
52 | //下面选项是添加对native libs的编译支持
53 | jniLibs.srcDirs = ['libs']
54 | }
55 | }
56 |
57 | lintOptions {
58 | abortOnError false
59 | checkReleaseBuilds false
60 | }
61 |
62 | signingConfigs {
63 | release {
64 | //输入自己的keyStore以及keyAlias
65 | storeFile file("release.keystore")
66 | storePassword STOREPASS
67 | keyAlias 'xxxx'
68 | keyPassword KEYPASS
69 | }
70 | }
71 |
72 | buildTypes {
73 | release {
74 | signingConfig signingConfigs.release
75 | minifyEnabled true
76 | zipAlignEnabled true
77 | //输入自己的混淆文件
78 | proguardFile 'proguard.txt'
79 | }
80 | }
81 |
82 | productFlavors {
83 | // Main android app markets
84 | Mocha{}
85 | Xiaomi{}
86 | //添加pre是因为flavor命名不支持数字开头,编译的时候会做处理
87 | pre360Channel{}
88 | Baidu{}
89 | Hiapk{}
90 | pre91Channel{}
91 | WanDouJia{}
92 | Tencent{}
93 | Anzhi{}
94 | AppChina{}
95 | }
96 | }
97 |
98 | tasks.withType(JavaCompile) {
99 | options.encoding = "UTF-8"
100 | }
101 |
102 | import java.util.regex.Pattern
103 | import java.util.regex.Matcher
104 |
105 | //替换AndroidManifest.xml的UMENG_CHANNEL_VALUE字符串为渠道名称 By Remex Huang
106 | android.applicationVariants.all{ variant ->
107 | variant.outputs.get(0).processManifest.doLast{
108 |
109 | //之前这里用的copy{},我换成了文件操作,这样可以在v1.11版本正常运行,并保持文件夹整洁
110 | //${buildDir}是指./build文件夹
111 | //${variant.dirName}是flavor/buildtype,例如GooglePlay/release,运行时会自动生成
112 | //下面的路径是类似这样:./build/manifests/GooglePlay/release/AndroidManifest.xml
113 |
114 | def channel;
115 | def apkname = "";
116 | if(variant.productFlavors[0].name.contains("_")){
117 | def flavorNames = variant.productFlavors[0].name.split("_")
118 | channel = flavorNames[0]
119 | apkname = "_" + flavorNames[1]
120 | } else {
121 | channel = variant.productFlavors[0].name
122 | if(!channel.contains("Mocha")){
123 | apkname = "_" + channel
124 | }
125 | }
126 |
127 | channel = channel.replaceAll("pre", "")
128 | apkname = apkname.replaceAll("pre", "")
129 |
130 | def manifestFile = "${buildDir}/intermediates/manifests/full/${variant.dirName}/AndroidManifest.xml"
131 |
132 | //将字符串UMENG_CHANNEL_VALUE替换成flavor的名字
133 | def updatedContent = new File(manifestFile).getText('UTF-8').replaceAll("MOCHA_CHANNEL", channel)
134 | new File(manifestFile).write(updatedContent, 'UTF-8')
135 |
136 | //获取版本号
137 | def patternVersionNumber = Pattern.compile("versionName=\"(\\d+)\\.(\\d+)\\.(\\d+)\"")
138 | def manifestText = new File(manifestFile).getText()
139 | def matcherVersionNumber = patternVersionNumber.matcher(manifestText)
140 | matcherVersionNumber.find()
141 | def majorVersion = Integer.parseInt(matcherVersionNumber.group(1))
142 | def minorVersion = Integer.parseInt(matcherVersionNumber.group(2))
143 | def pointVersion = Integer.parseInt(matcherVersionNumber.group(3))
144 | def versionName = + majorVersion + "." + minorVersion + "." + pointVersion
145 |
146 | //将此次flavor的AndroidManifest.xml文件指定为我们修改过的这个文件
147 | variant.outputs.get(0).processResources.manifestFile = file("${buildDir}/intermediates/manifests/full/${variant.dirName}/AndroidManifest.xml")
148 |
149 | println "******************/\n/\n/\n/\n/\n/\n"
150 | println "buildType.name = " + variant.buildType.name
151 | println "******************/\n/\n/\n/\n/\n/\n"
152 | def apkName = "Mocha";
153 | if (variant.buildType.name == "release") {
154 | apkName += apkname + "_V" + versionName + ".apk";
155 | //variant.outputFile = file("${buildDir}/outputs/mochapk/" + apkName)
156 | // !! 这里需要自定义自己的输出文件夹
157 | variant.outputs.get(0).outputFile = file("/Users/tengfei/Documents/yunyao/code/mocha/apk/" + versionName + "/" + apkName)
158 | } else {
159 | apkName += apkname + "-SNAPSHOT.apk";
160 | variant.outputs.get(0).outputFile = file("${buildDir}/outputs/apk/" + apkName)
161 | }
162 | }
163 | }
164 |
165 |
--------------------------------------------------------------------------------
/libs.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 |
3 | repositories {
4 | mavenCentral()
5 | }
6 |
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:1.0.0'
9 | }
10 | }
11 |
12 | apply plugin: 'android-library'
13 |
14 | dependencies{
15 | compile fileTree(dir: 'libs', include: '*.jar')
16 | }
17 |
18 | android {
19 |
20 | compileSdkVersion 18
21 | buildToolsVersion "20"
22 |
23 | defaultConfig {
24 | minSdkVersion 8
25 | targetSdkVersion 18
26 | }
27 | sourceSets {
28 | main {
29 | manifest.srcFile 'AndroidManifest.xml'
30 | java.srcDirs = ['src']
31 | resources.srcDirs = ['src']
32 | aidl.srcDirs = ['src']
33 | renderscript.srcDirs = ['src']
34 | res.srcDirs = ['res']
35 | assets.srcDirs = ['assets']
36 | }
37 | }
38 | lintOptions {
39 | abortOnError false
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':Mocha', ':HorizontalVariableListView-master', ':ListView_animotion/library', ':MultiprocessPreferences-master', ':PinterestLikeAdapterView-master'
2 |
3 | project(':HorizontalVariableListView-master').projectDir = new File('/Users/xxx/Documents/code/HorizontalVariableListView-master')
4 |
5 | project(':ListView_animotion/library').projectDir = new File('/Users/xxx/Documents/code/ListView_animotion/library')
6 |
7 | project(':MultiprocessPreferences-master').projectDir = new File('/Users/xxx/Documents/code/MultiprocessPreferences-master')
8 |
9 | project(':PinterestLikeAdapterView-master').projectDir = new File('/Users/xxx/Documents/code/PinterestLikeAdapterView-master')
10 |
--------------------------------------------------------------------------------