標籤:gradle eclispe 批量打包
在進行渠道打包的之前,先看看準備篇,知道打包為了什麼。參見1.0android批量打包認知。eclipse中使用gradle多渠道打包全部流程
一.產生gradle檔案,配置本地的gradle環境1.選中需要打包的項目右鍵選擇expert->產生gradle檔案,如所示
2.完成第一步後,重新整理項目可以得到如所示的檔案
顯然項目中多出了gradle.build檔案,gradle檔案夾。如果沒有出現,點擊項目右鍵-refresh重新整理過後看到已經產生的gradle檔案夾,如:
3.開啟上述gradle-wrapper.properties檔案
紅色表示部分:使用gradle打包的時候,所需要使用的檔案。
4.複製上述的url,或者直接到官網下載相應的gradle-1.12-all.zip.為什麼要下載對應的,可能是由於版本之間的差異,導致打包失敗。應該也可以嘗試升級adt或者eclipse中的gradle外掛程式的版本。
以上是官網下載的,在紅色標誌部分,可以選擇想要下載的對應版本。在初期我下載最高版本,最終打包沒有成功。下載了匹配版本打包成功。可是測試高版本,如果不行,就使用匹配的對應版本。這裡面選擇了匹配的對應版本。5.配置gradle的本地環境。gradle-1.12-all的解壓路徑
GRADLE_HOME D:\Gradle\gradle-1.12-all\gradle-1.12
配置一下path(GRADLE_HOME只是作為一個根路徑而已)
建立一個 gradle-repo檔案夾配置環境變數
GRADLE_USER_HOME
D:\Gradle\gradle-repo
測試gradle環境是否配置成功。
在命令提示字元中輸入:gradle -version
出現如結果,表示gradle配置成功。
二.使用gradle進行打包
1.查看需要打包的項目中的gradle.build檔案(預設產生的檔案)並添加相關指令碼代碼
buildscript { //buildscript中的聲明是gradle指令碼自身需要使用的資源。 //可以聲明的資源套件括依賴項、第三方外掛程式、maven倉庫地址等 repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.12.+' }}apply plugin: 'android'//在build.gradle檔案中直接聲明的依賴項、倉庫地址等資訊是項目自身需要的資源dependencies { compile fileTree(dir: 'libs', include: '*.jar')}android { compileSdkVersion 19 buildToolsVersion "19.1.0" sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } // Move the tests to tests/java, tests/res, etc... instrumentTest.setRoot('tests') // Move the build types to build-types/<type> // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src/<type>/... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } lintOptions { abortOnError false } ////////////////////以上代碼打出了最簡單的包,一般情況下產生了兩個包//////////////////// //*-debug-unaligned.apk:未進行zipAlign最佳化的apk包 //*-release-unsigned.apk:未簽名的apk包 //以上兩種包都不是正式所需要的包,添加下面代碼打出簽名包 signingConfigs { myConfig { //絕對路徑和相對路徑都可以 storeFile file("E:\\sjjywork\\key\\key4VipOneToOne\\JyVipKey.keystore") storePassword "sjjy,vip" keyAlias "jiayuan_vip_key" keyPassword "sjjy,vip" } } buildTypes{ release { //1.添加簽名 signingConfig signingConfigs.myConfig //2.runProguard 執行混淆代碼 runProguard true //混淆規則檔案 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' } } //添加了上述代碼之後,打出了已經簽名的apk:其中xxx-release-unaligned.apk是簽名為進行zipAligned最佳化的包 //xxx-release.apk是簽名和zipAlign最佳化過的包 //添加混淆代碼的執行代碼如上第二步,就可以實現打出混淆包 //下面的代碼開始打批量包 productFlavors { GooglePlay{ //替換manifest檔案中的預留位置(placeHolder) manifestPlaceholders = [UMENG_CHANNEL_VALUE:"GooglePlay"] } Store360{ manifestPlaceholders = [UMENG_CHANNEL_VALUE:"Store360" ] } //在下面繼續添加不同渠道的渠道代碼 } //通過以下方式是批量的設定// productFlavors.all { flavor -> // flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ] //}}tasks.withType(Compile) { options.encoding = "UTF-8" }
在這個檔案中手動添加的代碼都已經做了詳細的注釋。
2.manifest中添加友盟統計的key和渠道代碼(關於友盟統計的key的擷取和添加,直接參考友盟統計的文檔,不多做解釋)打渠道包的目的是什嗎?為什麼要打渠道包?這個可以見<<1.0apk批量打包認知>>得到的結論,是要做統計。上面的檔案中,使用了友盟統計。此時需要在manifest.xml添加如下代碼:
<!-- 渠道id,key直接使用umeng的,方便接入umeng sdk --> <meta-data android:name="UMENG_APPKEY" android:value="YOUR_APP_KEY" ></meta-data> <!--配置placeHolder(預留位置),用於多渠道打包的時候替換--> <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />
打批量包的時候,主要使用到的placeHolder:${UMENG_CHANNEL_VALUE} 資訊清單檔中的一個預留位置。在批量打包的過程批量替換這個UMENG_CHANNEL_VALUE這個欄位產生不同的apk包。
3.正式執行批量打包在控制台中,進入項目所在的目錄,執行gradle clean,gradle build。如果沒有報錯,將打包成功如:gradle clean
報錯的原因:注釋和代碼之間添加空行。因為對這個指令碼語言不太熟悉,所以不明具體原因。執行gradle build
到此整個批量打包的過程就完美結束。重新整理專案檔夾看看打出的包:
其中-項目名稱-渠道-release.apk就是最終我們所需的渠道apk。
整個批量打包的過程大概十幾分鐘就搞定了。但是如果對這裡面的打包過程是不是還存在很多疑惑。推薦看如下幾篇文章.
①自動產生的gradle.build檔案 直接進行打包會產生那些包?各種不同的包,有什麼區別?參見2.1 gradle打包blog②zipAlign最佳化是什麼意思?參見2.4③lint工具是做什麼用的?參見2.5④配置和打包的全過程大概十多分鐘。但是如果出現報錯,可就要耗費時間了。常見的報錯參考以下文章:參見2.3gradle打包遇到的錯誤
至此算是打包的所有流程真正的結束了。加入統計功能的代碼,直接根據友盟統計的文檔添加相應位置的代碼就可以了。
以上參見部分,未完待續....
gradle多渠道打包及友盟統計-eclipse版本