轉:http://my.oschina.net/fallenpanda/blog/373183?p={{page}}
關於多渠道簽名打包可以直接參考 友盟官方提供的gradle腳本
由於項目中引用了多個三方插件(如:地圖服務、推送服務、統計服務等)
對應的 包名不一樣(爲了方便測試 區分了 測試&正式 版本),所以對應的服務 appkey也不一樣
所以對這個腳本進行了修改
build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
apply plugin: 'com.android.application' dependencies { compile fileTree(dir: 'libs' , include: [ '*.jar' ]) compile fileTree(dir: 'libs' , include: '**/*.so' ) compile 'com.android.support:appcompat-v7:20.0.0' } android { compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION) buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION defaultConfig { applicationId project.ANDROID_BUILD_APPLICATIONID_DEBUG minSdkVersion Integer.parseInt(ANDROID_BUILD_MIN_SDK_VERSION) targetSdkVersion Integer.parseInt(ANDROID_BUILD_TARGET_SDK_VERSION) versionCode Integer.parseInt(project.VERSION_CODE) versionName project.VERSION_NAME } //渠道 productFlavors { develop { } production { applicationId project.ANDROID_BUILD_APPLICATIONID_PRODUCTION } googleplay { applicationId project.ANDROID_BUILD_APPLICATIONID_PRODUCTION } wandoujia { applicationId project.ANDROID_BUILD_APPLICATIONID_PRODUCTION } // store91 { // applicationId project.ANDROID_BUILD_APPLICATIONID_PRODUCTION // } // qq { // applicationId project.ANDROID_BUILD_APPLICATIONID_PRODUCTION // } // anzhi { // applicationId project.ANDROID_BUILD_APPLICATIONID_PRODUCTION // } } sourceSets { main { assets.srcDirs = [ 'assets' ] jniLibs.srcDirs = [ 'libs' ] } } //簽名 signingConfigs{ release { storeFile file( "keystore路徑" ) storePassword "***" keyAlias "***" keyPassword "***" } } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile( 'proguard-android.txt' ), 'proguard-rules.pro' signingConfig signingConfigs.release } } packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' } //這個是解決lint報錯的代碼 lintOptions { abortOnError false // 防止在發佈的時候出現因MissingTranslation導致Build Failed! disable 'MissingTranslation' } } tasks.withType(Compile) { options.encoding = "UTF-8" } //替換AndroidManifest.xml的UMENG_CHANNEL_VALUE字符串爲渠道名稱 By Remex Huang android.applicationVariants.all{ variant -> variant.processManifest.doLast{ //之前這裏用的copy{},我換成了文件操作,這樣可以在v1.11版本正常運行,並保持文件夾整潔 //${buildDir}是指./build文件夾 //${variant.dirName}是flavor/buildtype,例如GooglePlay/release,運行時會自動生成 //下面的路徑是類似這樣:./build/manifests/GooglePlay/release/AndroidManifest.xml def manifestFile = "${buildDir}/intermediates/manifests/${variant.dirName}/AndroidManifest.xml" //將字符串UMENG_CHANNEL_VALUE替換成flavor的名字 def updatedContent = new File(manifestFile).getText( 'UTF-8' ).replaceAll( "UMENG_CHANNEL_VALUE" , "${variant.productFlavors[0].name}" ) //替換包名、appkey if ( "develop" .equalsIgnoreCase( "${variant.productFlavors[0].name}" )){ updatedContent = updatedContent.replaceAll( "BAIDU_APPKEY_VALUE" , "${project.BAIDU_APPKEY_VALUE_DEBUG}" ).replaceAll( "UMENG_APPKEY_VALUE" , "${project.UMENG_APPKEY_VALUE_DEBUG}" ).replaceAll( "JPUSH_APPKEY_VALUE" , "${project.JPUSH_APPKEY_VALUE_DEBUG}" ).replaceAll( "APPLICATIONID" , "${project.ANDROID_BUILD_APPLICATIONID_DEBUG}" ) } else { updatedContent = updatedContent.replaceAll( "BAIDU_APPKEY_VALUE" , "${project.BAIDU_APPKEY_VALUE_PRODUCT}" ).replaceAll( "UMENG_APPKEY_VALUE" , "${project.UMENG_APPKEY_VALUE_PRODUCT}" ).replaceAll( "JPUSH_APPKEY_VALUE" , "${project.JPUSH_APPKEY_VALUE_PRODUCT}" ).replaceAll( "APPLICATIONID" , "${project.ANDROID_BUILD_APPLICATIONID_PRODUCTION}" ) } new File(manifestFile).write(updatedContent, 'UTF-8' ) //將此次flavor的AndroidManifest.xml文件指定爲我們修改過的這個文件 variant.processResources.manifestFile = file( "${buildDir}/intermediates/manifests/${variant.dirName}/AndroidManifest.xml" ) } } |
gradle.properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
ANDROID_BUILD_TOOLS_VERSION= 19.1 . 0 ANDROID_BUILD_SDK_VERSION= 19 VERSION_NAME= 1.0 VERSION_CODE= 1 GROUP=com.fallenpanda.app ANDROID_BUILD_MIN_SDK_VERSION= 7 ANDROID_BUILD_TARGET_SDK_VERSION= 15 #DEBUG包名 ANDROID_BUILD_APPLICATIONID_DEBUG=com.fallenpanda.app.demo #PRODUCTION包名 ANDROID_BUILD_APPLICATIONID_PRODUCTION=com.fallenpanda.app BAIDU_APPKEY_VALUE_DEBUG=百度地圖服務 DEBUG包名對應的appkey BAIDU_APPKEY_VALUE_PRODUCT=百度地圖服務 PRODUCTION包名對應的appkey UMENG_APPKEY_VALUE_DEBUG=友盟服務 DEBUG包名對應的appkey UMENG_APPKEY_VALUE_PRODUCT=友盟服務 PRODUCTION包名對應的appkey JPUSH_APPKEY_VALUE_DEBUG=極光推送服務 DEBUG包名對應的appkey JPUSH_APPKEY_VALUE_PRODUCT=極光推送服務 PRODUCTION包名對應的appkey |
AndroidManifest.xml
其中需要替換包名的地方用 APPLICATIONID 替代
渠道用 UMENG_CHANNEL_VALUE 替代
appkey分別用 BAIDU_APPKEY_VALUE、UMENG_APPKEY_VALUE、JPUSH_APPKEY_VALUE 替代
------------------------------------
最後clean
分別執行assembleGoogleplayRelease,分別生成渠道包
或者直接執行assembleRelease,一起生成
即可在項目build\outputs\apk目錄下找到生成的apk
-unaligned 後綴的apk僅僅是中間產物,直接無視
-release 後綴的就是各個渠道正式簽名後的apk了
參考原文地址:http://my.oschina.net/uboluo/blog/157483