---------------------------------------------------我的总结------------------------------------------------------
gradle中:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
-----------------------------------------proguard-rules.pro中---------------------------------------
#-----------------混淆配置设定------------------------------------------------------------------------
-optimizationpasses 5 #指定代码压缩级别
-dontusemixedcaseclassnames #混淆时不会产生形形色色的类名
-dontskipnonpubliclibraryclasses #指定不忽略非公共类库
-dontpreverify #不预校验,如果需要预校验,是-dontoptimize
-ignorewarnings #屏蔽警告
-verbose #混淆时记录日志
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* #优化
#-----------------不需要混淆第三方类库------------------------------------------------------------------
-dontwarn android.support.v4.** #去掉警告
-keep class android.support.v4.** { *; } #过滤android.support.v4
-keep interface android.support.v4.app.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment
#-----------------不需要混淆系统组件等-------------------------------------------------------------------
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public class * extends android.app.backup.BackupAgentHelper
-keep class com.classtc.test.entity.**{*;} #过滤掉自己编写的实体类
#----------------保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在------------------------------------
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
---------------------------------------------------多渠道打包(友盟)-------------------------------------------------------------
先在Manifest中:
<meta-data android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
在gradle中:
//多渠道打包
android {
// 打包渠道List
productFlavors {
LianXiang {}
Baidu {}
AnZhi{}
F360{}
xiaomi {}
MeiZu{}
WanDouJia{}
QQYingYongBao{}
}
// 批量处理,直接使用flavor的name作为APP_CHANNEL_VALUE的值
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
然后Build--》Generate Signed APK
gradle中:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
-----------------------------------------proguard-rules.pro中---------------------------------------
#-----------------混淆配置设定------------------------------------------------------------------------
-optimizationpasses 5 #指定代码压缩级别
-dontusemixedcaseclassnames #混淆时不会产生形形色色的类名
-dontskipnonpubliclibraryclasses #指定不忽略非公共类库
-dontpreverify #不预校验,如果需要预校验,是-dontoptimize
-ignorewarnings #屏蔽警告
-verbose #混淆时记录日志
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* #优化
#-----------------不需要混淆第三方类库------------------------------------------------------------------
-dontwarn android.support.v4.** #去掉警告
-keep class android.support.v4.** { *; } #过滤android.support.v4
-keep interface android.support.v4.app.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment
#-----------------不需要混淆系统组件等-------------------------------------------------------------------
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public class * extends android.app.backup.BackupAgentHelper
-keep class com.classtc.test.entity.**{*;} #过滤掉自己编写的实体类
#----------------保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在------------------------------------
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
---------------------------------------------------多渠道打包(友盟)-------------------------------------------------------------
先在Manifest中:
<meta-data android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
在gradle中:
//多渠道打包
android {
// 打包渠道List
productFlavors {
LianXiang {}
Baidu {}
AnZhi{}
F360{}
xiaomi {}
MeiZu{}
WanDouJia{}
QQYingYongBao{}
}
// 批量处理,直接使用flavor的name作为APP_CHANNEL_VALUE的值
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
然后Build--》Generate Signed APK