赞
踩
##打包AAR
./gradlew ugfingerlib:assembleRelease 打出的是 工程名-release.arr
多aar打包
model模块打包成jar包
plugins {
id 'com.android.library'
}
task makeJar(type: Copy) {
//删除存在的
delete 'build/hwaudiotranslib.jar'
//设置拷贝的文件
from('build/intermediates/aar_main_jar/release/')
//打进jar包后的文件目录
into('build/')
//将classes.jar放入build/libs/目录下
//include ,exclude参数来设置过滤
include('classes.jar')
//重命名
rename ('classes.jar', 'hwaudiotranslib.jar')
}
makeJar.dependsOn(build)
# Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile #----------------------基本指令区----------------- # 设置混淆的压缩比率 0 ~ 7 -optimizationpasses 5 # 混淆后类名都为小写 Aa aA -dontusemixedcaseclassnames # 指定不去忽略非公共库的类 -dontskipnonpubliclibraryclasses # 不优化输入的类文件 -dontoptimize # 不做预校验的操作 -dontpreverify # 混淆时不记录日志 -verbose # 保留代码行号,方便异常信息的追踪 -keepattributes SourceFile,LineNumberTable # 混淆采用的算法. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*# dump文件列出apk包内所有class的内部结构 -dump class_files.txt # seeds.txt文件列出未混淆的类和成员 -printseeds seeds.txt # usage.txt文件列出从apk中删除的代码 -printusage unused.txt # mapping文件列出混淆前后的映射 -printmapping mapping.txt # 忽略警告 不加的话某些情况下打包会报错中断 -ignorewarnings #----------------------Android通用----------------- # 避免混淆Android基本组件,下面是兼容性比较高的规则 -keep public class * extends android.app.Activity -keep public class * extends android.app.Fragment -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.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class * extends android.view.View -keep public class com.android.vending.licensing.ILicensingService # 保留support下的所有类及其内部类 -keep class android.support.** {*;} -keep interface android.support.** {*;} -keep public class * extends android.support.v4.** -keep public class * extends android.support.v7.** -keep public class * extends android.support.annotation.** -dontwarn android.support.** # 保留androidx下的所有类及其内部类 -keep class androidx.** {*;} -keep public class * extends androidx.** -keep interface androidx.** {*;} -keep class com.google.android.material.** {*;} -dontwarn androidx.** -dontwarn com.google.android.material.** -dontnote com.google.android.material.** # 保持Activity中与View相关方法不被混淆 -keepclassmembers class * extends android.app.Activity{ public void *(android.view.View); } # 避免混淆所有native的方法,涉及到C、C++ -keepclasseswithmembernames class * { native <methods>; } # 避免混淆自定义控件类的get/set方法和构造函数 -keep public class * extends android.view.View{ *** get*(); void set*(***); public <init>(android.content.Context); public <init>(android.content.Context,android.util.AttributeSet); public <init>(android.content.Context,android.util.AttributeSet,int); } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); } # 避免混淆枚举类 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } # 避免混淆序列化类 # 不混淆Parcelable和它的实现子类,还有Creator成员变量 -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } # 不混淆Serializable和它的实现子类、其成员变量 -keep public class * implements java.io.Serializable {*;} -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } # 资源ID不被混淆 -keep class **.R$* {*;} # 回调函数事件不能混淆 -keepclassmembers class * { void *(**On*Event); void *(**On*Listener); } # Webview 相关不混淆 -keepclassmembers class fqcn.of.javascript.interface.for.webview { public *; } -keepclassmembers class * extends android.webkit.WebViewClient { public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap); public boolean *(android.webkit.WebView, java.lang.String); } -keepclassmembers class * extends android.webkit.WebViewClient { public void *(android.webkit.WebView, java.lang.String); } # 使用GSON、fastjson等框架时,所写的JSON对象类不混淆,否则无法将JSON解析成对应的对象 -keepclassmembers class * { public <init>(org.json.JSONObject); } #不混淆泛型 -keepattributes Signature #避免混淆注解类 -dontwarn android.annotation -keepattributes *Annotation* #避免混淆内部类 -keepattributes InnerClasses #(可选)避免Log打印输出 -assumenosideeffects class android.util.Log { public static *** v(...); public static *** d(...); public static *** i(...); public static *** w(...); public static *** e(...); } #kotlin 相关 -dontwarn kotlin.** -keep class kotlin.** { *; } -keep interface kotlin.** { *; } -keepclassmembers class kotlin.Metadata { public <methods>; } -keepclasseswithmembers @kotlin.Metadata class * { *; } -keepclassmembers class **.WhenMappings { <fields>; } -assumenosideeffects class kotlin.jvm.internal.Intrinsics { static void checkParameterIsNotNull(java.lang.Object, java.lang.String); } -keep class kotlinx.** { *; } -keep interface kotlinx.** { *; } -dontwarn kotlinx.** -dontnote kotlinx.serialization.SerializationKt -keep class org.jetbrains.** { *; } -keep interface org.jetbrains.** { *; } -dontwarn org.jetbrains.** -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.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class * extends android.view.View -keepclassmembers class * extends android.app.Activity{ public void *(android.view.View); } -keep public class * extends android.view.View { *** get*(); void set*(***); public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); } # 不混淆资源部分的配置 -keep class **.R$* {*;} -keep class android.support.annotation.Keep -keep @android.support.annotation.Keep class * -keepclasseswithmembers class * { @android.support.annotation.Keep <methods>; } -keepclasseswithmembers class * { @android.support.annotation.Keep <fields>; } -keepclasseswithmembers class * { @android.support.annotation.Keep <init>(...); } # ==================glide start=================== -keep public class * implements com.bumptech.glide.module.GlideModule -keep public class * extends com.bumptech.glide.module.AppGlideModule -keep public enum com.bumptech.glide.load.ImageHeaderParser$** { **[] $VALUES; public *; } #glide如果你的API级别<=Android API 27 则需要添加 -dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder # for DexGuard only #-keepresourcexmlelements manifest/application/meta-data@value=GlideModule # ==================glide end===================== # ==================okhttp start=================== -dontwarn okhttp3.** -dontwarn okio.** -dontwarn javax.annotation.** -dontwarn org.conscrypt.** # A resource is loaded with a relative path so the package of this class must be preserved. -keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase # Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. -dontwarn org.codehaus.mojo.animal_sniffer.* # OkHttp platform used only on JVM and when Conscrypt dependency is available. -dontwarn okhttp3.internal.platform.ConscryptPlatform # ==================okhttp end===================== # ==================retrofit2 start=================== # Retain generic type information for use by reflection by converters and adapters. -keepattributes Signature # Retain service method parameters. -keepclassmembernames,allowobfuscation interface * { @retrofit2.http.* <methods>; } # Ignore annotation used for build tooling. -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement # ==================retrofit2 end===================== # ==================gson start===================== -dontwarn com.google.gson.** -keep class com.google.gson.**{*;} -keep interface com.google.gson.**{*;} -dontwarn sun.misc.** -keepclassmembers,allowobfuscation class * { @com.google.gson.annotations.SerializedName <fields>; } #实体类单独配置 # ==================gson end===================== # ==================eventbus start=================== #eventbus -keepattributes *Annotation* -keepclassmembers class * { @org.greenrobot.eventbus.Subscribe <methods>; } -keep enum org.greenrobot.eventbus.ThreadMode { *; } # Only required if you use AsyncExecutor -keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent { <init>(java.lang.Throwable); } # ==================eventbus end===================
开启混淆
debug{
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。