Android studio 使用心得(四)---android studio 多渠道打包

me87re 10年前

第一就是配置:在项目的build.gradle里面配置  先上图,再上代码。Android studio 使用心得(四)---android studio 多渠道打包

 

Android studio 使用心得(四)---android studio 多渠道打包Android studio 使用心得(四)---android studio 多渠道打包Android studio 使用心得(四)---android studio 多渠道打包

第二步,就是打包。(网上有介绍用命令打包,可是我这人太懒,发现了个小窍门,直接在android studio 里面进行。)上图(另外,后面我还是补上了gradle命令打包的介绍。大家可以看看http://my.oschina.net/aibenben/blog/370985

Android studio 使用心得(四)---android studio 多渠道打包

如果没有keystore,先创建一个,默认为.jks文件,一样的。

Android studio 使用心得(四)---android studio 多渠道打包

Android studio 使用心得(四)---android studio 多渠道打包

大家这里创建完后,可以再回头看看前面配置的build.gradle里面signingConfigs的内容。是不是就懂了(其实我这里有一个疑问,感觉如果用我这种方式去打包,签名文件都没有去读取配置文件里面的了)

Android studio 使用心得(四)---android studio 多渠道打包

大家可以注意这里的Flavors,先回头看看前面配置的buld.gradle文件里面的productFlavors,嘿嘿,渠道都在这了,按住ctrl,选择你要打包的渠道,然后Finish.静静等待。需要要时间

Android studio 使用心得(四)---android studio 多渠道打包

打包成功!点击直接会进入到项目

 Android studio 使用心得(四)---android studio 多渠道打包

打包好的apk,就在这了。

Android studio 使用心得(四)---android studio 多渠道打包

 

 ----当然,打包的过程中,好多盆友可能会遇到一个错误.导致打包失败。

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]))

 是因为混淆打包的时候,有重复的v4包,所以你只需要删掉一个,在Demo4这个项目里面,我是直接注释掉

Android studio 使用心得(四)---android studio 多渠道打包

 

再打包,等待,成功。

打包成功,我们可以验证 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)              }          }      }  }