Gradle-Android渠道編包及重新命名

來源:互聯網
上載者:User

標籤:

現在一個Android工程都會在不同的商店平台上發布產品,為了統計方便都會為每個平台分配一個渠道ID,因此我們需要根據不同的ID來打包針對不同平台的APK。無疑Gradle是一個很好的工具,具體Gradle是什麼,請點擊這裡。

 

使用新版本的gradle,解決這個問題很方便,使用manifestPlaceholders即可(詳情請點擊這裡),但如果碰到老版本的gradle,是不支援的,所以我們需要另想辦法。

下面是我弄的一個適用的辦法:

  1 buildscript {  2     repositories {  3         mavenCentral()  4     }  5     dependencies {  6         classpath ‘com.android.tools.build:gradle:0.6.+‘  7     }  8 }  9  10 apply plugin: ‘android‘ 11  12 repositories { 13     mavenCentral() 14     maven { url ‘libraries‘ } 15 } 16  17 android { 18     compileSdkVersion 19 19     buildToolsVersion "19" 20  21     defaultConfig { 22         minSdkVersion 8 23         targetSdkVersion 19 24  25         versionCode 1 26         versionName "1.1.1" 27         packageName "~~~~~~~" 28     } 29  30     signingConfigs { 31         release { 32             storeFile file("~~~.keystore") 33             storePassword "~~~" 34             keyAlias "~~~.keystore" 35             keyPassword "~~~" 36         } 37     } 38  39     productFlavors { 40         渠道名 { 41             signingConfig signingConfigs.release 42             packageName "對應的包名" 43         } 44     } 45  46     buildTypes { 47         release { 48             runProguard true 49             proguardFile "proguard.cfg" 50         } 51     } 52  53     sourceSets { 54         main { 55             manifest.srcFile ‘AndroidManifest.xml‘ 56             java.srcDirs = [‘src‘] 57             resources.srcDirs = [‘src‘] 58             aidl.srcDirs = [‘src‘] 59             renderscript.srcDirs = [‘src‘] 60             res.srcDirs = [‘res‘] 61             assets.srcDirs = [‘assets‘] 62         } 63     } 64  65     //替換Manifest中的“CHANNEL_VALUE”為渠道號 66     android.applicationVariants.all{ variant ->  67         variant.processManifest.doLast{ 68             copy{ 69                 from("${buildDir}/manifests"){ 70                     include "${variant.dirName}/AndroidManifest.xml" 71                 } 72                 into("${buildDir}/manifests/$variant.name") 73       74                 filter{ 75                     String line -> line.replaceAll("CHANNEL_VALUE", "${variant.productFlavors[0].name}") 76                 } 77                 variant.processResources.manifestFile = file("${buildDir}/manifests/${variant.name}/${variant.dirName}/AndroidManifest.xml") 78             }     79         } 80         //重新命名 81         renameOutputFile(variant) 82     } 83  84 } 85  86 def releaseTime() { 87     return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) 88 } 89  90 def renameOutputFile(variant) { 91     def apk = variant.outputFile; 92     def newName = ""; 93  94     // get data for apk renaming 95     def packageName = variant.productFlavors[0].packageName 96     def channelName = variant.productFlavors[0].name 97     def versionName = android.defaultConfig.versionName  98     def versionCode = android.defaultConfig.versionCode 99     def releaseTime = releaseTime()100 101     if (variant.zipAlign) {102         newName = "名字-" + versionCode + "-" + versionName + "-" + packageName + "-" + channelName + "-smaller-" + releaseTime + "-release.apk"103     }else{104         newName = "名字-" + versionCode + "-" + versionName + "-" + packageName + "-" + channelName + "-smaller-" + releaseTime + "-unalign.apk"105     }106     variant.outputFile = new File(apk.parentFile, newName);107 }108 109 dependencies {110     //compile project(‘:abc‘)111     //compile ‘com.android.support:support-v4:13.0.+‘112 113     compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])114 }115 116 task copyNativeLibs(type: Copy) {117     from fileTree(dir: ‘libs‘, include: ‘**/*.so‘) into ‘build/native-libs‘118 }119 120 tasks.withType(Compile) {121     compileTask -> compileTask.dependsOn copyNativeLibs122     options.encoding = "UTF-8"123 }124 125 tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->126     pkgTask.jniDir file(‘build/native-libs‘)127 }

這裡面還會有一個問題,就是中文編碼的問題,如果Manifest.xml中含有中文,十有八九會報錯的。所以這裡有一個解決辦法:

修改你的GRADLE_HOME/bin下的gradle執行檔案,windows應該是gradle.bat,其它系統的直接就是gradle檔案,將DEFAULT_JVM_OPTS的值修改為"-Dfile.encoding=UTF-8"。

 

 

祝大家一路順風。

 

Gradle-Android渠道編包及重新命名

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.