当前位置:首页 » 安卓系统 » android混淆不混淆第三方jar

android混淆不混淆第三方jar

发布时间: 2025-07-14 23:26:52

A. android代码混淆以及怎么判断一个apk代码是否被混淆过

1、proguard原理
java代码编译成二进制class文件,这个class文件也可以反编译成源代码,除了注释外,其他的code基本都可以看到。为了防止重要code被泄露,我们往往需要混淆,即把方法名,变量名,类名,包名等这些java元素的名称改成让人意想不到的名称,这样代码结构就没有变化,还可以运行,但是想弄懂代码的架构却很难。proguard就起到了这样的作用:
一、它可以分析一组class的结构,根据用户的配置,然后把这些class文件中可以混淆的java元素进行混淆

二、删除无效的代码

三、对代码进行优化(使用adt插件导出的apk,还进行zipalign优化)

缺省情况下,proguard会混淆所有代码,但是下面几种情况是不能改变java元素的名称,否则就会导致程序出错。
一、用到反射的地方(android中的api常用@hide注释掉,开发者在调用相应的方法时,需要用到反射)

二、当app的代码要依赖于系统的接口时,如被系统代码调用的回调方法,这种方法比较复杂

三、java元素名称是配置文件中配置好的

所以在使用proguard时,我们需要有个配置文件告诉proguard,哪些java元素是不能混淆的。

2、proguard配置

-dontwarn缺省proguard会检查每一个引用是否正确,但是第三方库里往往有些不会用到的类,没有正确引用,如果不配置的话,系统就会报错。

-keep指定的类和类成员被保留作为入口

-keepclassmembes指定的类成员被保留。

-keepclasswithmembers指定的类和类成员被保留,假如指定的类成员存在的话。

B. android 加入library如何混淆

android工程会看到项目有

project.properties这个文件就是用来开启项目是否混淆

proguard-project.txt 这个文件就是记录了代码混淆的属性

要开启混淆,只需要将project.properties 文件中的

# proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”的“#”去掉就可以了。


关于proguard-project.tx混淆的属性:

通常情况下,我们只需要作以上几步操作就能满足需求,如果有一些特殊要求,某些类或者jar包不需要混淆,这个时候就需要修改proguard-project.txt文件了。以下是网上搜索的网友分享的经验:

1.在proguard-project.txt文件中添加不需要混淆的类和第三方的jar包

这个是保持自己包中不需要混淆的类,如果有些类调用了jni也不需要混淆,不然会出错。还有如果项目中有其他项目作为library引入,那这些项目的一些类也不能混淆。



2.另外还有其他一些经验:

-optimizationpasses 5压缩等级
-dontusemixedcaseclassnames 【混淆时不会产生形形色色的类名 】
- 【指定不去忽略非公共的库类。 】
-dontpreverify 【不预校验】

-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 【优化】

-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 com.android.vending.licensing.ILicensingService

-keep public abstract interface com.asqw.android.Listener{
public protected <methods>;【所有方法不进行混淆】
}
-keep public class com.asqw.android{
public void Start(java.lang.String); 【对该方法不进行混淆】
}

-keepclasseswithmembernames class * { 【保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)】

native <methods>;
}

-keepclasseswithmembers class * { 【保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。】
public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}

-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 *;
}

C. Android如何保持指定类不被混淆

包名 package com.example.test
类名 public class WebAppInterface{}
加上完整的包名才行。
-keep class com.example.test.WebAppInterface {*;}

热点内容
4000以内二手安卓机怎么选 发布:2025-07-15 05:11:25 浏览:641
静态编译修复器 发布:2025-07-15 05:11:24 浏览:505
iphonexr的存储空间 发布:2025-07-15 05:09:20 浏览:327
能缓存航海王 发布:2025-07-15 04:55:38 浏览:90
安卓手机投屏为什么只能本地视频 发布:2025-07-15 04:51:19 浏览:537
栈的存储结构 发布:2025-07-15 04:51:16 浏览:233
现在天龙八部脚本 发布:2025-07-15 04:45:35 浏览:332
优酷缓存后怎么竖屏观看 发布:2025-07-15 04:44:09 浏览:247
蚁周算法 发布:2025-07-15 04:34:28 浏览:600
电脑服务器名称写什么 发布:2025-07-15 04:29:53 浏览:430