Grade多渠道打包

一、在Android studio 中有两种的方式可以进行打包


(1)第一种方式

build->generate signed apk  


而后选择要进行打包的项目,next  进行选择签名文件,填写密码 next 


在下面打包有两种选择,一种是release 一种是debug ,在debug的状态下是不会进行签名和混淆的,

只有选择release的状态下才会进行签名和混淆


点击finish即可签名打包成功


(2)第二种方式

在build variants 里面将要打包的项目进行选择  debug 或是 release 


而后在项目的build.gradle文件中进行配置文件位置,密码等

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. signingConfigs {  
  2.         release {  
  3.             storeFile file("签名文件位置")  
  4.             keyAlias "  "  
  5.             keyPassword " 密码 "  
  6.             storePassword " 密码 "  
  7.         }  
  8.     }  
而后直接进行run即可,生成的apk即使进行过签名的apk文件。

生成的apk文件在:android studio工程的存储路径下 app/build/outputs/apk 中


二、在android studio中进行混淆


在eclipse中的是  proguard.cfg 文件 而在android studio中使用的是proguard-rules.pro ,不过直接拿过来用也是可以的

只要在build.gradle里面进行配置下即可,如下是在build.gradle中的配置

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. buildTypes {  
  2.         debug{//测试下的配置  
  3.             minifyEnabled false  
  4.             shrinkResources false  
  5.             signingConfig  signingConfigs.release  
  6.         }  
  7.         release {//正式的配置  
  8.             minifyEnabled true  // false表示不混淆,true表示混淆  
  9.             shrinkResources true //移除无用的resource文件  
  10.             //如果用eclipse里面的proguard.cfg,直接替换 proguard-rules.pro 即可  
  11.             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
  12.             signingConfig  signingConfigs.release  
  13.         }  
  14.     }  

以下是整个的build.gradle的配置文件

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. apply plugin: 'com.android.application'  
  2.   
  3. android {  
  4.   
  5.     compileSdkVersion 21  
  6.     buildToolsVersion '21.1.2'  
  7.   
  8.     defaultConfig {  
  9.         applicationId "com.**.**"  
  10.         minSdkVersion 8  
  11.         targetSdkVersion 21  
  12.         versionCode 1  
  13.         versionName "1.0"  
  14.     }  
  15.   
  16.     packagingOptions {  
  17.         exclude 'META-INF/DEPENDENCIES'  
  18.         exclude 'META-INF/LICENSE.txt'  
  19.         exclude 'META-INF/license.txt'  
  20.         exclude 'META-INF/NOTICE.txt'  
  21.         exclude 'META-INF/notice.txt'  
  22.         exclude 'META-INF/ASL2.0'  
  23.         exclude 'META-INF/NOTICE'  
  24.         exclude 'META-INF/LICENSE'  
  25.         exclude '!META-INF/MANIFEST.MF'  
  26.         exclude 'META-INF/MANIFEST.MF'  
  27.     }  
  28.   
  29.     sourceSets.main {  
  30.         jniLibs.srcDirs = ['libs']  
  31.     }  
  32.     productFlavors {  
  33.     }  
  34.   
  35.     /** 
  36.      * 签名设置 
  37.      */  
  38.     signingConfigs {  
  39.         release {  
  40.             storeFile file("**")  
  41.             keyAlias "**"  
  42.             keyPassword "**"  
  43.             storePassword "**"  
  44.         }  
  45.     }  
  46.   
  47.     buildTypes {  
  48.         debug{  
  49.             minifyEnabled false  
  50.             shrinkResources false  
  51.             signingConfig  signingConfigs.release  
  52.         }  
  53.         release {  
  54.             minifyEnabled true  
  55.             shrinkResources true  
  56.             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
  57.             signingConfig  signingConfigs.release  
  58.         }  
  59.     }  
  60.   
  61. }  
  62.   
  63. dependencies {  
  64.     compile fileTree(dir: 'libs', include: ['*.jar'])  
  65.     compile 'com.umeng.analytics:analytics:latest.integration'  
  66.     compile files('libs/httpclient-android-4.3.3.jar')  
  67.     compile files('libs/httpmime-4.3.5.jar')  
  68.     compile files('libs/jpush-sdk-release1.7.3.jar')  
  69.     compile files('libs/mframework.jar')  
  70.     compile files('libs/nineoldandroids-2.4.0.jar')  
  71.     compile files('libs/pinyin4j-2.5.0.jar')  
  72.     compile files('libs/ShareSDK-Core-2.5.9.jar')  
  73.     compile files('libs/ShareSDK-QZone-2.5.9.jar')  
  74.     compile files('libs/ShareSDK-SinaWeibo-2.5.9.jar')  
  75.     compile files('libs/ShareSDK-TencentWeibo-2.5.9.jar')  
  76.     compile files('libs/ShareSDK-Wechat-2.5.9.jar')  
  77.     compile files('libs/ShareSDK-Wechat-Core-2.5.9.jar')  
  78.     compile files('libs/ShareSDK-Wechat-Favorite-2.5.9.jar')  
  79.     compile files('libs/ShareSDK-Wechat-Moments-2.5.9.jar')  
  80.     compile files('libs/umeng-analytics-v5.6.4.jar')  
  81.     compile files('libs/swipemenulistview.jar')  
  82.     compile files('libs/xstream-1.4.7.jar')  
  83.     compile project(':**')  
  84.     compile project(':wheel')  
  85. }  


在使用友盟统计的时候,只需要在dependencies中添加
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. compile 'com.umeng.analytics:analytics:latest.integration'  
不需要在lib中添加jar包,要不会有 zip无法打开,或是包重复的错误


以下是混淆文件  proguard-rules.pro 

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. -optimizationpasses 5  
  2. -dontusemixedcaseclassnames  
  3. -dontskipnonpubliclibraryclasses  
  4. -dontpreverify  
  5. -verbose  
  6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  
  7. -keep public class * extends android.app.Activity  
  8. -keep public class * extends android.app.Application  
  9. -keep public class * extends android.app.Service  
  10. -keep public class * extends android.content.BroadcastReceiver  
  11. -keep public class * extends android.content.ContentProvider  
  12. -keep public class * extends android.app.backup.BackupAgentHelper   
  13. -keep public class * extends android.preference.Preference          
  14. -keep public class com.android.vending.licensing.ILicensingService  
  15.   
  16. -keepclasseswithmembernames class * {  
  17. native <methods>;  
  18. }  
  19. -keepclasseswithmembers class * {  
  20. public <init>(android.content.Context, android.util.AttributeSet);  
  21. }  
  22. -keepclasseswithmembers class * {  
  23.     public <init>(android.content.Context, android.util.AttributeSet, int);  
  24. }  
  25. -keepclassmembers enum * {  
  26. public static **[] values();  
  27. public static ** valueOf(java.lang.String);  
  28. }  
  29. -keep class * implements android.os.Parcelable {  
  30.   public static final android.os.Parcelable$Creator *;  
  31. }  
  32.   
  33. -dontwarn com.sina.**    
  34. -keep class com.sina.** { *;}    
  35.     
  36. -dontwarn com.handmark.**    
  37. -keep class com.handmark.** { *;}    
  38.     
  39. -dontwarn com.viewpagerindicator.**    
  40. -keep class com.viewpagerindicator.** { *;}   
  41.   
  42. -dontwarn cn.jpush.**  
  43. -keep class cn.jpush.** { *; }  
  44.   
  45. -keepattributes Signature  
  46. -keep class sun.misc.Unsafe { *; }  
  47. -keep class com.google.gson.examples.android.model.** { *; }  
  48.   
  49. -dontwarn com.ant.**  
  50. -keep class com.ant.** { *; }  
  51.   
  52. -dontwarn com.nineoldandroids.**  
  53. -keep class com.nineoldandroids.** { *; }  
  54.   
  55. -dontwarn m.framework.**  
  56. -keep class m.framework.** { *; }  
  57.   
  58. -dontwarn org.apache.http.entity.mime.**  
  59. -keep class org.apache.http.entity.mime.** { *; }  
  60.   
  61. -dontwarn com.handmark.pulltorefresh.library.**  
  62. -keep class com.handmark.pulltorefresh.library.** { *; }  
  63.   
  64. -dontwarn com.loopj.android.http.**  
  65. -keep class com.loopj.android.http.** { *; }  
  66.   
  67. -dontwarn org.apache.http.**  
  68. -keep class org.apache.http.** { *; }  
  69.   
  70. -dontwarn org.apache.http.**  
  71. -keep class org.apache.http.** { *; }  
  72.   
  73. -dontwarn com.nostra13.universalimageloader.**  
  74. -keep class com.nostra13.universalimageloader.** { *; }  
  75.   
  76. #-libraryjars   libs/android-support-v4.jar   
  77. -dontwarn android.support.v4.**   
  78. -keep class android.support.v4.** { *; }  
  79. -keep interface android.support.v4.app.** { *; }  
  80. -keep public class * extends android.support.v4.**  
  81. -keep public class * extends android.app.Fragment  
  82.   
  83. -keep class com.google.gson.JsonObject { *; }  
  84. -keep class com.badlogic.** { *; }  
  85. -keep class * implements com.badlogic.gdx.utils.Json*  
  86. -keep class com.google.** { *; }  
  87.   
  88. -keep class com.google.** {  
  89.     <fields>;  
  90.     <methods>;  
  91. }  
  92.   
  93. -keepclassmembers class * extends java.io.Serializable {  
  94.     static final long serialVersionUID;  
  95.     private static final java.io.ObjectStreamField[] serialPersistentFields;  
  96.     private void writeObject(java.io.ObjectOutputStream);  
  97.     private void readObject(java.io.ObjectInputStream);  
  98.     java.lang.Object writeReplace();  
  99.     java.lang.Object readResolve();  
  100. }  
  101.   
  102. # Gson specific classes  
  103. -keep class sun.misc.Unsafe {  
  104.     <fields>;  
  105.     <methods>;  
  106. }  
  107.   
  108. # -keep class com.google.gson.stream.** { *; }    
  109. # Application classes that will be serialized/deserialized over Gson  
  110. -keep class com.**.** {  //当项目中有用到泛型的时候,要让项目中的module对象不进行混淆  
  111.     <fields>;  
  112.     <methods>;  
  113. }  
  114.   
  115. -keepclassmembers class * {  
  116.    public <init> (org.json.JSONObject);  
  117. }  
  118.   
  119. -keep public class com.**.**.R$*{  
  120. public static final int *;  
  121. }  
  122.   
  123. -dontwarn u.aly.**  
  124. -keep class u.aly.** { *; }  

配置完后,之间像,签名打包进行打包即可



三、多渠道打包

在项目的 androidmanifest.xml 中添加

<meta-data
    android:name="UMENG_CHANNEL"
    android:value="${UMENG_CHANNEL_VALUE}" />

而后在项目的build.gradle中添加即可

//多渠道打包
productFlavors {
    LianXiang {}
    Baidu {}
    AnZhi{}
    F360{}
    xiaomi {}
    MeiZu{}
    WanDouJia{}
    QQYingYongBao{}

    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }
}

通过 build->generate signed apk  进行打包,即可得到多个渠道的apk包

原文地址:https://www.cnblogs.com/vegetate/p/9997352.html