Android开发规范:APP常用混淆proguard模板

本文详细介绍了Android开发中的混淆规则,包括保留特定类、接口、方法和属性,以及针对第三方库如Webview、Bugly、ButterKnife等的特殊处理,旨在帮助开发者避免混淆问题并优化代码结构。
摘要由CSDN通过智能技术生成

保留枚举类不被混淆

-keepclassmembers enum * {

public static **[] values();

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

}

保留我们自定义控件(继承自View)不被混淆

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

*** get*();

void set*(***);

public (android.content.Context);

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

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

}

保留Parcelable序列化类不被混淆

-keep class * implements android.os.Parcelable {

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

}

保留Serializable序列化的类不被混淆

-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();

}

对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆

-keepclassmembers class * {

void (**OnEvent);

void (**OnListener);

}

keep webview 通用

-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, jav.lang.String);

}

The support library contains references to newer platform versions.

Don’t warn about those in case this app is linking against an older

platform version. We know about them, and they are safe.

-dontwarn android.support.**

Understand the @Keep support annotation.

-keep class android.support.annotation.Keep

-keep @android.support.annotation.Keep class * {*;}

-keepclasseswithmembers class * {

@android.support.annotation.Keep ;

}

-keepclasseswithmembers class * {

@android.support.annotation.Keep ;

}

-keepclasseswithmembers class * {

@android.support.annotation.Keep (…);

}

-dontwarn com.android.internal.**

-keep class com.android.internal.** { *;}

-dontwarn com.android.server.**

-keep class com.android.server.** { *;}

-dontwarn com.mediatek.**

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

-dontwarn android.**

-keep class android.** { *;}

-dontwarn org.apache.http.**

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

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

-keepclasseswithmembers class * {

public (android.content.Context);

}

-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);

}

#--------------------------------------------------------------------------------------------------

###################################################################################################

定制化配置

###################################################################################################

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

keep 使用 webview 的类

-keepclassmembers class com.xxx.ui.fragment.MyFragment {

public *;

}

keep 使用 webview 的类的所有的内部类

-keepclassmembers class com.xxx.ui.fragment.device.plugin.MyFragment$*{

*;

}

保持bean目录下文件不被混淆

-keep class com.xxx.bean.** {*;}

#--------------------------------------------------------------------------------------------------

#---------------------------------------------2.第三方引用------------------------------------------

Bugly

-dontwarn com.tencent.bugly.**

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

-keepattributes EnclosingMethod

ButterKnife

-keep class butterknife.** { *; }

-dontwarn butterknife.internal.**

-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {

@butterknife.* ;

}

-keepclasseswithmembernames class * {

@butterknife.* ;

}

Glide

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

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

**[] $VALUES;

public *;

}

RxJava RxAndroid

-dontwarn sun.misc.**

-keepclassmembers class rx.internal.util.unsafe.ArrayQueueField* {

long producerIndex;

long consumerIndex;

}

-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {

rx.internal.util.atomic.LinkedQueueNode producerNode;

}

-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {

rx.internal.util.atomic.LinkedQueueNode consumerNode;

}

Eventbus

-keepclassmembers class ** {

@de.greenrobot.event.Subscribe ;

}

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

Only required if you use AsyncExecutor

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

(Java.lang.Throwable);

}

Nineoldandroids

-dontwarn com.nineoldandroids.**

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

Gson

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

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

-keep class com.google.gson.examples.android.model.** { *;}

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

Greendao

-keepclassmembers class * extends de.greenrobot.dao.AbstractDao {

public static java.lang.String TABLENAME;

}

-keep class **$Properties

-keep class de.greenrobot.dao.** { *;}

-keep class com.xxx.data.db.*$Properties {

public static ;

}

-keepclassmembers class com.xxx.data.db.** {

public static final ;

}

If you do not use SQLCipher:

-dontwarn org.greenrobot.greendao.database.**

Pinyin4j

-dontwarn net.soureceforge.pinyin4j.**

-keep class net.sourceforge.pinyin4j.** { *;}

Jpush

-dontwarn cn.jpush.**

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

Zxing

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

-dontwarn com.google.zxing.**

Zbar

-dontwarn net.sourceforge.zbar.**

-keep class net.sourceforge.zbar.** { *;}

Wechat-sdk-android-without-mta

-dontwarn com.tencent.mm.opensdk.**

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

Sndecode

-dontwarn com.xxx.test.sndecode.**

-keep class com.xxx.test.sndecode.** { *;}

Zipentry

-dontwarn com.file.zip.**

-keep class com.file.zip.** { *;}

海康威视

-dontwarn com.ezviz.**

-dontwarn com.hik.**

-dontwarn com.hikvision.**

-dontwarn com.videogo.**

-dontwarn org.MediaPlayer.PlayM4.**
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

尾声

最后,我再重复一次,如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

进阶学习视频

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

进阶学习视频

[外链图片转存中…(img-kfPxbh1T-1712561722343)]

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-81mu6Hzd-1712561722343)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值