请根据提供的内容完成内容重构,并保持段落结构:
```java
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator CREATOR;
}
表示不混淆 Parcelable 的实现类中的 CREATOR,我们知道序列化与反序列化的过程都需要 CREATOR, 混淆了就无法工作了。
-keepclassmembers class *
.R$
{
public static ;
}
表示不混淆 R 类中 的 static 变量,在 R 类中。这些资源 ID 是系统自动帮我们生成的,混淆了就无法找到相应的资源。
-dontwarn android.support.**
表示忽略 android.support 包下代码的警告。因为 android.support 包下,许多类都是在高版本中才能使用的,不过你不用担心低版本使用了会报错,因为在 support 包里面的类都已经对版本进行判断,所有直接忽略即可。
-keep class android.support.annotation.Keep
表示不混淆 Keep 类
-keep @android.support.annotation.Keep class * {*;}
表示不混淆以下形式的代码
@Keep *{
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep ;
}
表示不混淆所有类中用 @Keep 注解的方法
-keepclasseswithmembers class * {
@android.support.annotation.Keep ;
}
表示不混淆所有类中用 @Keep 的变量
-keepclasseswithmembers class * {
@android.support.annotation.Keep (...);
}
表示不混淆所有类中用 @Keep 注解的构造方法
Android 混淆代码示例
如上图,假如我们的项目中的配置是这样的,如果我们想保持项目中 xj.progurddemo.been 包下的类都不被混淆,我们可以这样写:
-keep class xj.progurddemo.been.**
请根据提供的内容完成内容重构,并保持段落结构:
而 -keep class xj.progurddemo.been.* 只能保证 People,Test 类不被混淆。Debug 包下的 Debug 类还是会被混淆。到这里,相信你已经明白 ** 和 * 之间的区别了。 ** 包含目录下的所有子目录,而 * 只包含 目录下的直接目录。假如我们有以下类 Test,public class Test {String name;public void test(){}public abstract String test(String name) }我们不想 test 类中的 test 方法不被混淆,而 name 字段可以被混淆,我们可以这样配置 -keepclassmembers public class xj.progurddemo.been.Test {*** test*(***);*** 表示匹配任意参数,这样 Test 类中的 test 方法都不会被混淆,不管该方法含有什么类型的参数和该方法的返回类型。Android 混淆语法介绍看完简单的代码示例,下面我们一起拉看一下混淆的语法。首先我们先来看一下 keep 关键字| 关键字 | 描述 |
| — | — |
| keep | 保留类和类中的成员,防止被混淆或者移除 |
| keepnames | 保留类和类中的成员,防止被混淆,但是当成员没有被引用时会被移除 |
| keepclassmembers | 只保留类中的成员,防止他们被混淆或者移除 |
| keepclassmembersnames | 只保留类中的成员,防止他们被混淆或者移除,但是当类中的成员没有被引用时还是会被移除 |
| keepclasseswithmembers | 保留类和类中的成员,前提是指明的类中必须含有该成员,没有的话还是会被混淆 |
| keepclasseswithmembersnames | 保留类和类中的成员,前提是指明的类中必须含有该成员,没有的话还是会被混淆。需要注意的是没有被引用的成员会被移除接下来我们一起来看一下通配符| 关键字 | 描述 |
| — | — |
| | 匹配类中的所有字段 |
| | 匹配类中的所有方法 |
| | 匹配类中的所有构造函数 |
Android混淆插件推荐及常用的混淆模板
Github上的混淆插件:AndroidProguardPlugin
Github上有一个名为AndroidProguardPlugin的插件,它收集了常用的混淆模板,基本能满足大部分需求。具体使用方法可以参考该链接,已经讲解得非常清楚。
Android常用混淆模板:
```java
//-------------------------------------------基本不用动区域--------------------------------------------
//---------------------------------基本指令区----------------------------------
-optimizationpasses 5
-dontskipnonpubliclibraryclassmembers
-printmapping proguardMapping.txt
```
优化规则如下:
1. 不进行代码简化和类型转换的优化。
2. 不对字段进行合并。
3. 保留注解、内部类。
4. 保留方法签名。
5. 保留源文件和行号表。
默认保留区(不混淆)如下:
1. 继承自Activity、Application、Service、BroadcastReceiver、ContentProvider等类,不进行混淆。
2. 保留以下类及其扩展:
```java
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.support.multidex.MultiDexApplication
-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
```
请根据以下内容完成重构,并保持段落结构:
-keep class android.support.** {*;}
-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);
}
-keepclasseswithmembers class * {
public (android.content.Context, android.util.AttributeSet);
public (android.content.Context, android.util.AttributeSet, int);
}
# 这个主要是在layout 中写的onclick方法 android:onclick="onClick",不进行混淆
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-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();
}
-keep class *
.R$
{
*;
}
-keepclassmembers class * {
void *(*Event);
请将以下内容重构后的内容提供,并保持段落结构:
```java
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
#// natvie 方法不混淆
-keepclasseswithmembernames class * {
native ;
}
#保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
#----------------------------------------------------------------------------
#---------------------------------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, jav.lang.String);
}
```
请根据提供的内容完成内容重构,并保持段落结构:
```java
#----------------------------------------------------------------------------
#------------------------实体类---------------------------------
修改成你对应的包名
-keep class [your_pkg].** { *; }
#---------------------------------第三方包-------------------------------
#支付宝支付
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
-keep public class * extends android.os.IInterface
#微信支付
-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}
-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}
-keep class com.tencent.wxop.** { *; }
-dontwarn com.tencent.mm.**
```
请根据以下规则重构代码:
```java
-keep class com.tencent.mm.** {*;}
-keep class sun.misc.Unsafe { *; }
-keep class com.taobao.** {*;}
-keep class com.alibaba.** {*;}
-keep class com.alipay.** {*;}
-dontwarn com.taobao.**
-dontwarn com.alibaba.**
-dontwarn com.alipay.**
-keep class com.ut.** {*;}
-dontwarn com.ut.**
-keep class com.ta.** {*;}
-dontwarn com.ta.**
-keep class anet.** {*;}
-keep class org.android.spdy.** {*;}
-keep class org.android.agoo.** {*;}
-dontwarn anet.**
-dontwarn org.android.spdy.**
-dontwarn org.android.agoo.**
-keepclasseswithmembernames class com.xiaomi.** {*;}
-keep public class * extends com.xiaomi.mipush.sdk.PushMessageReceiver
-dontwarn com.xiaomi.push.service.b
-keep class org.apache.http.**
-keep interface org.apache.http.**
-dontwarn org.apache.**
#okhttp3.x
-dontwarn com.squareup.okhttp3.**
-keep class com.squareup.okhttp3.** { *;}
-dontwarn okio.**
#sharesdk
-keep class cn.sharesdk.** {*;}
-keep class com.sina.** {*;}
-keepclassMembers public static final ** { *;}
-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); }
-dontwarn **
-keep class ** {*;}
-keep class com.mob.** {*;}
```
```
# 忽略警告
-dontwarn com.mob.**
-dontwarn cn.sharesdk.**
-dontwarn *
# R$ 保留的类
.R$
nineoldandroids-2.4.0.jar
-keep public class com.nineoldandroids.** {*;}
#################### zxing #####################
-keep class com.google.zxing.** {*;}
-dontwarn com.google.zxing.**
# 百度定位 类和接口
-keep class com.baidu.** {*;}
-keep class vi.com.** {*;}
-dontwarn com.baidu.**
# okhttp
-dontwarn com.squareup.okhttp.**
-keep class com.squareup.okhttp.{*;}
# retrofit
-dontwarn retrofit.**
-keep class retrofit.** { *; }
-keepattributes Signature
-keepattributes Exceptions
-dontwarn okio.**
# recyclerview-animators
-keep class jp.wasabeef.** {*;}
-dontwarn jp.wasabeef.*
# multistateview
-keep class com.kennyc.view.** { *; }
-dontwarn com.kennyc.view.*
# universal-image-loader 混淆
-dontwarn com.nostra13.universalimageloader.**
-keep class com.nostra13.universalimageloader.** { *; }
# ormlite
-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
```
请将以下内容保存为 .pro 文件,然后使用 proguard 进行混淆。
```pro
-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }
# UMENG 友盟
========= 友盟 =================
-dontshrink
-dontoptimize
-dontwarn com.google.android.maps.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-dontwarn com.facebook.**
-keep enum com.facebook.**
-keepattributes Exceptions,InnerClasses,Signature
-keepattributes
Annotation
-keepattributes SourceFile,LineNumberTable
-keep public interface com.facebook.**
-keep public interface com.tencent.**
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**
-keep public class com.umeng.socialize.* {*;}
-keep public class javax.**
-keep public class android.webkit.**
-keep class com.facebook.**
-keep class com.umeng.scrshot.**
-keep public class com.tencent.** {*;}
-keep class com.umeng.socialize.sensor.**
-keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}
```
请根据提供的内容完成内容重构,并保持段落结构:
```java
-keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}
-keep class im.yixin.sdk.api.YXMessage {*;}
-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}
-keep public class [your_pkg].R$*{
public static final int *;
}
-keepclassmembers class * {
public (org.json.JSONObject);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
#友盟自动更新
-keep public class com.umeng.fb.ui.ThreadView {
}
-keep public class * extends com.umeng.**
以下包不进行过滤
-keep class com.umeng.** { *; }
#-ButterKnife 7.0
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* ;
}
-keepclasseswithmembernames class * {
@butterknife.* ;
}
#AndFix
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
native ;
}
#eventbus 3.0
```
```
请根据提供的内容完成内容重构,并保持段落结构:
-keepattributes
Annotation
-keepclassmembers class ** {
@org.greenrobot.eventbus.Subscribe ;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
(java.lang.Throwable);
}
# EventBus
-keepclassmembers class ** {
public void onEvent*(**);
}
-keepclassmembers class ** {
public void xxxxxx(**);
}
################ GSON #################
-keep class com.google.gson.** {*;}
-keep class com.google.**{*;}
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
-keep class com.google.gson.examples.android.model.** { *; }
-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();
}
```
请根据以下内容完成内容重构,并保持段落结构:
```java
-keep public class * implements java.io.Serializable {*;}
-support-v4
#https://stackoverflow.com/questions/18978706/obfuscate-android-support-v7-widget-gridlayout-issue
-dontwarn android.support.v4.**
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class android.support.v4.** { *; }
-support-v7
#-dontwarn android.support.v7.**
-keep class android.support.v7.internal.** { *; }
-keep interface android.support.v7.internal.** { *; }
-keep class android.support.v7.** { *; }
-support design
#@link http://stackoverflow.com/a/31028536
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }
#-------------------------------------------------------------------------
picasso
-keep class com.squareup.picasso.** {*; }
-dontwarn com.squareup.picasso.**
#glide
-keep public class * implements com.bumptech.glide.module.GlideModule
```
请根据提供的内容完成内容重构,并保持段落结构:
```java
public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
$VALUES;
public *;
}
######### greenDao混淆
# -------------------------------------------
-keep class de.greenrobot.dao.** {*;}
-keepclassmembers class * extends de.greenrobot.dao.AbstractDao {
public static Java.lang.String TABLENAME;
}
-keep class **$Properties
############### volley混淆
# -------------------------------------------
-keep class com.android.volley.** {*;}
-keep class com.android.volley.toolbox.** {*;}
-keep class com.android.volley.Response$* { *; }
-keep class com.android.volley.Request$* { *; }
-keep class com.android.volley.RequestQueue$* { *; }
-keep class com.android.volley.toolbox.HurlStack$* { *; }
-keep class com.android.volley.toolbox.ImageLoader$* { *; }
#jpush极光推送
# -------------------------------------------
-dontwarn cn.jpush.**
-keep class cn.jpush.** { *; }
#activeandroid
# -------------------------------------------
-keep class com.activeandroid.** { *; }
-dontwarn com.ikoding.app.biz.dataobject.**
-keep public class com.ikoding.app.biz.dataobject.** { *;}
```
自我介绍:我是一名拥有13年上海交大学历的Android开发工程师,曾在小公司和华为、OPPO等知名企业工作。在过去的几年里,我一直在阿里集团担任Android开发相关职位。
作为一名资深的Android开发者,我深知许多初级和中级开发者在提升技能时面临的困境:既想自学又不知道如何开始,或者参加培训班但高昂的学费让人望而却步。此外,自学过程中可能会遇到无法系统化学习的问题,导致效果不佳且耗费时间。因此,我决定整理一份《2024年Android移动开发全套学习资料》,希望能帮助那些想要提升技能的朋友,同时减轻他们的负担。
这份资料涵盖了从零基础到进阶的所有知识点,包括大厂面试题、学习笔记、源码解析、实战项目和讲解视频等。文件内容繁多,这里仅展示部分目录截图。如果你觉得这些内容对你有帮助,可以扫描下方二维码获取(备注:Android)。
尾声:以薪资待遇为基础,以发展为最终目标,我们应该在高薪资的领域寻求最佳发展。以下是一些由Android行业大佬整理的关于上述技术点的进阶资料,点击链接即可获取!
---
[外链图片转存中...(img-hARZGEYs-1712151265560)]
[外链图片转存中...(img-XoEjaNZS-1712151265561)]
[外链图片转存中...(img-qBT8xHxj-1712151265561)]
[外链图片转存中...(img-HA5Y6mAh-1712151265561)]
[外链图片转存中...(img-KX5FcKC7-1712151265562)]
Android开发进阶资料包含零基础学习资料和适合3年以上经验的小伙伴深入学习提升的进阶课程。这些资料基本涵盖了95%以上Android开发知识点,真正体系化。由于文件较大,这里只展示了部分目录截图,每个节点都包含大厂面经、学习笔记、源码讲义、实战项目和讲解视频,并且会持续更新。
以下是几位Android行业大佬整理的一些进阶资料:
[外链图片转存中...(img-9m01RQ90-1712151265562)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
在寻求高薪资和发展的同时,以薪资待遇为基础,以发展为最终目标是非常重要的。因此,掌握这些进阶资料将有助于你在Android行业获得更好的发展。