• 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包

  • 相关阅读:
    精妙SQL语句介绍
    ASP判断文件地址是否有效
    将源代码清空,这样别人就看不到源码了
    部署
    sublime
    vscode
    android node
    mac开启热点
    微信
    常见问题
  • 原文地址:https://www.cnblogs.com/vegetate/p/9997352.html
Copyright © 2020-2023  润新知