android不混淆第三方库,Android第三方类库中的jar包不被混淆

本文介绍了如何在Android项目中防止特定的第三方库如'com.blankj:utilcode:1.9.8'被混淆。通过查看项目的External Libraries,找到需要保留的jar包,然后在混淆文件(proguard-rules.pro)中添加-keep规则来保护这些包不被混淆。同时,文章提供了基础混淆配置和针对不同库如ShareSDK、EventBus、极光推送、OkHttp、Retrofit、Glide等的混淆配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

e9bd4b6560f8?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

项目截图

假如你的项目中有这样一个image类库, 打开image类库下的build.gradle文件,查看里面有哪些引用包,如果lib里面也有包, lib中的也需要查看

e9bd4b6560f8?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图中箭头所指都是引入的包

我的image下的build.gradle文件中,箭头指示的都是来自第三方的引入

假如现在,让 最后一个"compile'com.blankj:utilcode:1.9.8'" 不被混淆

e9bd4b6560f8?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

External Libraries是项目中导入所有包的集合

打开图中的 External Libraries 文件, 我们导入的所有的第三方jar包都在里面

找到"compile'com.blankj:utilcode:1.9.8'"

e9bd4b6560f8?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

jar包截图

查看包名,在混淆文件中添加

e9bd4b6560f8?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image

所有的jar包都依次写上 -keep class "jar包名",就ok了

--注意事项--

1.保证实体类不被混淆

2.保证第三方的jar包不被混淆,类似于,友盟,地图,等等,配置的时候,就把混淆文件也copy过来,免得再回去找

3.添加基础混淆配置,网上有很多的实例

################ 以下直接copy到 proguard-rules.pro文件中,实体类,第三方部分,需修改####################

################################################基础混淆通用配置####################

#指定代码的压缩级别

-optimizationpasses 5

#包明不混合大小写

-dontusemixedcaseclassnames

#不去忽略非公共的库类

-dontskipnonpubliclibraryclasses

#优化 不优化输入的类文件

-dontoptimize

#预校验

-dontpreverify

#混淆时是否记录日志

-verbose

# 混淆时所采用的算法

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

#保护注解

-keepattributes *Annotation*

#如果有引用v4包可以添加下面这行

-keep public class * extends android.support.v4.app.Fragment

#忽略警告

-ignorewarning

##记录生成的日志数据,gradle build时在本项目根目录输出##

#apk 包内所有 class 的内部结构

-dump proguard/class_files.txt

#未混淆的类和成员

-printseeds proguard/seeds.txt

#列出从 apk 中删除的代码

-printusage proguard/unused.txt

#混淆前后的映射

-printmapping proguard/mapping.txt

########记录生成的日志数据,gradle build时 在本项目根目录输出-end######

#如果引用了v4或者v7包

-dontwarn android.support.**

#保持 native 方法不被混淆

-keepclasseswithmembernames class * {

native ;

}

#保持自定义控件类不被混淆

-keepclasseswithmembers class * {

public (android.content.Context, android.util.AttributeSet);

}

-keepclasseswithmembers class * {

public (android.content.Context, android.util.AttributeSet, int);

}

#保持自定义控件类不被混淆

-keepclassmembers class * extends android.app.Activity {

public void *(android.view.View);

}

-keep public class * extends android.view.View {

public (android.content.Context);

public (android.content.Context, android.util.AttributeSet);

public (android.content.Context, android.util.AttributeSet, int);

public void set*(...);

}

#保持 Parcelable 不被混淆

-keep class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator *;

}

#保持 Serializable 不被混淆

-keepnames class * implements java.io.Serializable

#保持 Serializable 不被混淆并且enum 类也不被混淆

-keepclassmembers class * implements java.io.Serializable {

static final long serialVersionUID;

private static final java.io.ObjectStreamField[] serialPersistentFields;

!static !transient ;

!private ;

!private ;

private void writeObject(java.io.ObjectOutputStream);

private void readObject(java.io.ObjectInputStream);

java.lang.Object writeReplace();

java.lang.Object readResolve();

}

#保持枚举 enum 类不被混淆

-keepclassmembers enum * {

public static **[] values();

public static ** valueOf(java.lang.String);

}

-keepclassmembers class * {

public void *ButtonClicked(android.view.View);

}

#不混淆资源类

-keepclassmembers class **.R$* {

public static ;

}

#避免混淆泛型 如果混淆报错建议关掉

-keepattributes Signature

#移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用,这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制

#-assumenosideeffects class android.util.Log {

# public static *** v(...);

# public static *** i(...);

# public static *** d(...);

# public static *** w(...);

# public static *** e(...);

#}

#-------------------------------------------定制化区域----------------------------------------------

#---------------------------------1.实体类---------------------------------

-keep class 自己项目的包名.bean.** { *; }

#########################################################第三方的配置开始#######################

############shareSDK混淆配置################

-keep class cn.sharesdk.**{*;}

-keep class com.sina.**{*;}

-keep class **.R$* {*;}

-keep class **.R{*;}

-keep class com.mob.**{*;}

#####EventBus混淆配置

-keepattributes *Annotation*

-keepclassmembers class ** {

@org.greenrobot.eventbus.Subscribe ;

}

-keep enum org.greenrobot.eventbus.ThreadMode { *; }

# Only required if you use AsyncExecutor

-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {

(java.lang.Throwable);

}

###########极光混淆配置

-dontoptimize

-dontpreverify

-dontwarn cn.jpush.**

-keep class cn.jpush.** { *; }

-keep class * extends cn.jpush.android.helpers.JPushMessageReceiver { *; }

-dontwarn cn.jiguang.**

-keep class cn.jiguang.** { *; }

###########okhttputils 和okhttp相关的 的混淆####################

#okhttputils

-dontwarn com.zhy.http.**

-keep class com.zhy.http.**{*;}

#okhttp

-dontwarn okhttp3.**

-keep class okhttp3.**{*;}

#okio

-dontwarn okio.**

-keep class okio.**{*;}

-dontwarn com.squareup.okhttp.**

-dontwarn javax.annotation.**

-dontwarn com.android.volley.toolbox.**

-dontwarn com.facebook.infer.**

-keep class com.squareup.okhttp.** { *;}

-keep interface com.squareup.okhttp.** { *; }

######################### Retrofit混淆配置##############################

-dontnote retrofit2.Platform

-dontnote retrofit2.Platform$IOS$MainThreadExecutor

-dontwarn retrofit2.Platform$Java8

-keepattributes Signature

-keepattributes Exceptions

#########################友盟的混淆配置################

-keep class com.umeng.** {*;}

-keepclassmembers class * {

public (org.json.JSONObject);

}

-keepclassmembers class * {

public (org.json.JSONObject);

}

-keep public class [com.uutus.huaxia.geography].R$*{

public static final int *;

}

-keepclassmembers enum * {

public static **[] values();

public static ** valueOf(java.lang.String);

}

-keep public class [com.uutus.huaxia.geography].R$*{

public static final int *;

}

###############加密混淆###########

########腾讯X5内核浏览器中的的代码不被混淆#####

-keep class com.tencent.** {*;}

########RSA中的代码不被混淆

-keep class Decoder.** {*;}

-keep class org.bouncycastle.** {*;}

################Glide加载图片添加混淆

-keep public class * implements com.bumptech.glide.module.GlideModule

-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {

**[] $VALUES;

public *;

}

######## glide类库

######## com.github.bumptech.glide:okhttp3-integration:1.4.0@aar中的代码不被混淆

######## jp.wasabeef:glide-transformations:2.0.1 不被混淆

-keep class com.bumptech.** {*;}

-keep class jp.wasabeef.glide.** {*;}

########## 保证类库Image 中导入的jar包不被混淆

-keep class com.davemorrissey.** {*;}

-keep class com.filippudak.** {*;}

-keep class am.util.** {*;}

-keep class com.blankj.** {*;}

#########################################################第三方的配置结束#######################

#==================gson && protobuf==========================

-dontwarn com.google.**

-keep class com.google.gson.** {*;}

-keep class com.google.protobuf.** {*;}

#ProGuard 混淆

# keep住源文件以及行号

-keepattributes SourceFile,LineNumberTable

-keepattributes Signature

-dontwarn com.jcraft.jzlib.**

-keep class com.jcraft.jzlib.** { *;}

-dontwarn sun.misc.**

-keep class sun.misc.** { *;}

-dontwarn com.alibaba.fastjson.**

-keep class com.alibaba.fastjson.** { *;}

-dontwarn sun.security.**

-keep class sun.security.** { *; }

-dontwarn com.google.**

-keep class com.google.** { *;}

-dontwarn com.avos.**

-keep class com.avos.** { *;}

-keep public class android.net.http.SslError

-keep public class android.webkit.WebViewClient

-dontwarn android.webkit.WebView

-dontwarn android.net.http.SslEr

-dontwarn android.webkit.WebViewClient

-dontwarn android.support.**

-dontwarn org.apache.**

-keep class org.apache.** { *;}

-dontwarn org.jivesoftware.smack.**

-keep class org.jivesoftware.smack.** { *;}

-dontwarn com.loopj.**

-keep class com.loopj.** { *;}

-dontwarn org.xbill.**

-keep class org.xbill.** { *;}

-keepattributes *Annotation*

# Gson

-keep class com.example.testing.retrofitdemo.bean.**{*;} # 自定义数据模型的bean目录

#gson

#如果用用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错。

##---------------Begin: proguard configuration for Gson ----------

# Gson uses generic type information stored in a class file when working with fields. Proguard

# removes such information by default, so configure it to keep all of it.

-keepattributes Signature

# For using GSON @Expose annotation

-keepattributes *Annotation*

# Gson specific classes

-dontwarn sun.misc.**

#-keep class com.google.gson.stream.** { *; }

# Prevent proguard from stripping interface information from TypeAdapterFactory,

# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)

-keep class * implements com.google.gson.TypeAdapterFactory

-keep class * implements com.google.gson.JsonSerializer

-keep class * implements com.google.gson.JsonDeserializer

# Application classes that will be serialized/deserialized over Gson

##---------------End: proguard configuration for Gson ----------

#基础混淆添加配置

-keepclassmembers class **.R$* {

public static ;

public static final int *;

}

-keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆

public void *(android.view.View);

}

<think>好的,用户想了解Java中的第三方类库,我需要先明确第三方类库的定义。根据引用[1],Java的I/O类库有像Write和Reader这样的抽象类,但这些都是Java标准库的一部分,第三方的。第三方类库应该是指非Java官方提供的、由其他组织或个人开发的库,比如引用[3]提到的XStream。 用户的问题括定义、用途和常见示例。首先,定义方面,第三方类库是独立于JDK的,需要手动引入项目。用途的话,可以扩展功能,比如处理XML、网络请求等。常见例子比如OkHttp和XStream,引用[2]和[3]都提到了这些例子。 需要注意引用中的内容是否正确。引用[2]提到用户手动添加第三方库如OkHttp到jar,说明第三方库需要额外配置。引用[3]中的XStream是转换XML的工具,确实是第三方库的典型应用。需要确保这些例子准确,并且解释清晰。 可能用户对如何引入第三方库也有疑问,比如使用Maven或Gradle,但问题中没有直接问,过生成相关问题时可以涉及。还要注意区分标准库和第三方库,避免混淆。最后,结构要清晰,分点回答定义、用途、示例,并引用提供的资料来支持。</think>### Java中的第三方类库 #### 1. **定义** Java中的第三方类库(Third-Party Libraries)是指由非Java官方(如Oracle或OpenJDK团队)开发的、可复用的代码集合。这些类库通过提供特定功能或简化开发流程,扩展了Java标准库(JDK)的能力。例如,引用[1]提到的`Writer`和`Reader`类是Java标准库的一部分,而引用[3]中的**XStream**(XML与Java对象转换工具)则属于第三方类库。 #### 2. **用途** - **功能扩展**:弥补标准库的足,例如网络请求(OkHttp)、数据序列化(XStream)等[^3]。 - **提升效率**:封装复杂操作,如引用[3]中XStream直接实现对象与XML的转换,减少开发工作量。 - **标准化解决方案**:提供行业认可的协议支持,例如HTTP/2(OkHttp)、数据库连接池(HikariCP)等。 #### 3. **常见示例** - **OkHttp**:用于高效处理HTTP请求的库,引用[2]中提到手动将其集成到项目中以解决依赖问题[^2]。 - **XStream**:实现Java对象与XML的互相转换,简化数据交换场景的编码。 - **Apache Commons**:提供字符串处理、集合操作等工具类。 - **JUnit**:单元测试框架,用于自动化测试代码逻辑。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值