第一就是配置:在項目的build.gradle裏面配置 先上圖,再上代碼。java
第二步,就是打包。(網上有介紹用命令打包,但是我這人太懶,發現了個小竅門,直接在android studio 裏面進行。)上圖(另外,後面我仍是補上了gradle命令打包的介紹。你們能夠看看http://my.oschina.net/aibenben/blog/370985)android
若是沒有keystore,先建立一個,默認爲.jks文件,同樣的。app
你們這裏建立完後,能夠再回頭看看前面配置的build.gradle裏面signingConfigs的內容。是否是就懂了(其實我這裏有一個疑問,感受若是用我這種方式去打包,簽名文件都沒有去讀取配置文件裏面的了)maven
你們能夠注意這裏的Flavors,先回頭看看前面配置的buld.gradle文件裏面的productFlavors,嘿嘿,渠道都在這了,按住ctrl,選擇你要打包的渠道,而後Finish.靜靜等待。須要要時間gradle
打包成功!點擊直接會進入到項目優化
打包好的apk,就在這了。ui
----固然,打包的過程當中,好多盆友可能會遇到一個錯誤.致使打包失敗。spa
Execution failed for task ':proguardGooglePlayRelease'.java.io.IOException: Can't write [D:\androidstudiocode\Demo4\build\intermediates\classes-proguard\GooglePlay\release\classes.jar] (Can't read [D:\androidstudiocode\Demo4\build\intermediates\exploded-aar\Demo4\appcompat_v7_8\unspecified\libs\android-support-v4.jar(;;;;;;!META-INF/MANIFEST.MF)] (Duplicate zip entry [android/support/v4/b/d.class == android-support-v4.jar:android/support/v4/os/ParcelableCompatCreatorHoneycombMR2.class])).net
是由於混淆打包的時候,有重複的v4包,因此你只須要刪掉一個,在Demo4這個項目裏面,我是直接註釋掉debug
再打包,等待,成功。
打包成功,咱們能夠驗證 Android 多渠道打包渠道驗證 .
最後直接貼上配置代碼
apply plugin: 'com.android.application' dependencies { // compile fileTree(dir: 'libs', include: '*.jar') compile project(':appcompat_v7_8') } buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.0.0' } } android { compileSdkVersion 19 buildToolsVersion "21.0.2" 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') } defaultConfig { applicationId "com.example.demo4" minSdkVersion 8 targetSdkVersion 19 versionCode 1 versionName "1.0" // dex突破65535的限制 multiDexEnabled true
// AndroidManifest.xml 裏面UMENG_CHANNEL的value爲 ${UMENG_CHANNEL_VALUE} manifestPlaceholders = [UMENG_CHANNEL_VALUE: "channel_name"] } //執行lint檢查,有任何的錯誤或者警告提示,都會終止構建,咱們能夠將其關掉。 lintOptions { abortOnError false } //簽名 signingConfigs { debug { storeFile file("C:/Users/xxx/.android/debug.keystore") } relealse { storeFile file("demo.jks") storePassword "demo123456" keyAlias "demo_4" keyPassword "demo123456" } } buildTypes { debug { // 顯示Log buildConfigField "boolean", "LOG_DEBUG", "true" versionNameSuffix "-debug" minifyEnabled false zipAlignEnabled false shrinkResources false signingConfig signingConfigs.debug } release { // 不顯示Log buildConfigField "boolean", "LOG_DEBUG", "false" //混淆 minifyEnabled true //Zipalign優化 zipAlignEnabled true // 移除無用的resource文件 shrinkResources true //加載默認混淆配置文件 progudard-android.txt在sdk目錄裏面,不用管,proguard.cfg是咱們本身配<span></span>的混淆文件 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.cfg' //簽名 signingConfig signingConfigs.relealse } } //渠道Flavors,我這裏寫了一些經常使用的 productFlavors { GooglePlay {} xiaomi {} umeng {} } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk") output.outputFile = new File(outputFile.parent, fileName) } } } }