Android代码混淆,如何过滤掉反射的R文件及第三方包?
解决方案:在Proguard.cfg方件中添加以下设定:
- 过滤R文件的混淆:
-keep class **.R$* { *; }
- 过滤第三方包的混淆:
-keep class packagename.** {*;}(其中packagename为第三方包的包名)
Android导入第三方jar包,proguard混淆脚本(屏蔽警告,不混淆第三方包)
最近1个项目中 需要导入移动MM的第三方计费包,混淆时用到了如下脚本,可屏蔽警告,不混淆第三方包指定内容。
非常有效
proguard.cfg 文件
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-ignorewarnings //这1句是屏蔽警告,脚本中把这行注释去掉
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
//这1句是导入第三方的类库,防止混淆时候读取包内容出错,脚本中把这行注释去掉
-libraryjars libs/mmbilling.jar
-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
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
//这4句是不混淆第三方包中的指定内容,脚本中把这行注释去掉 -keep class com.ccit.** {*; }
-keep class ccit.** { *; }
-keep class com.aspire.**
-keep class mm.vending.**
今天在打包混淆的时候,因为使用了android-support-v4而发生混淆错误,无法打包,网上google了一下,没发现可用的,就东拼西凑的把网上各个版本拼凑了下,拼凑出下面自己可用通过的代码。
在proguard.cfg中加入以下代码:
-libraryjars libs/android-support-v4.jar //这里根据你的jar包的路径做改动
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment
不混淆webview中对javascript接口
-keep public class com.igrs.dlna.activity.webviewActivity.JavaScriptInterface
-keepclassmembers class com.igrs.dlna.activity.webviewActivity.JavaScriptInterface{
void showSource(java.lang.String,java.lang.String);
}
-keepclassmembers class com.igrs.dlna.activity.webviewActivity$InJavaScriptLocalObj {
public void showSource(java.lang.String,java.lang.String);
public void showTitle(java.lang.String);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
混淆android的jar包配置文件proguard.cfg如下
-injars libs\your_library.jar
-outjars libs\your_library_out.jar
-libraryjars 'E:\program_tools\android-sdk\platforms\android-9\android.jar'
-optimizationpasses 5
-dontusemixedcaseclassnames
-ignorewarning
-dontskipnonpubliclibraryclasses
-dontoptimize
-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
-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 *;
}
如上的红色文字非常重要
-injars 表示你要混淆的jar文件
-outjars 是混淆后的jar文件名
-libraryjars 是混淆时需要引用的android库
-ignorewarning 表示混淆时忽略所以的警告
-dontoptimize 不进行优化,这句代码非常重要。并且配置中不能有-dontpreverify字段;-dontpreverify在混淆jar时没有问题但是在apk应用中使用该jar后对apk进行混淆时就会失败。
如果项目中使用了jar库,则proguard.cfg文件的配置如下
-optimizationpasses 2
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-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
-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 *;
}
上面的配置中 -optimizationpasses 只能为1,2;3以上混淆就会出错!
相关推荐
本篇文章将深入探讨Android代码混淆配置的细节,帮助开发者理解如何有效地使用这一技术。 混淆是通过重命名类、方法和变量,使得原始代码变得难以理解的过程。在Android中,我们通常使用ProGuard工具进行代码混淆,...
本文将深入探讨Android代码混淆的前因后果、原理以及如何实施。 首先,我们来理解什么是代码混淆。代码混淆是将源代码转换成一种难以理解和阅读的形式,通常通过重命名变量、方法和类名,以及压缩和优化代码结构来...
本文将详细探讨Android代码混淆的原理及其实践方法。 #### 二、代码混淆的目的 1. **保护知识产权**:通过混淆处理后的代码很难被逆向工程,这有助于保护开发者的核心算法和逻辑不被盗用。 2. **减小APK大小**:...
"Android代码混淆及签名" Android 代码混淆是指对 Android 应用程序的源代码进行混淆处理,以防止别人反编译和盗取源代码。代码混淆可以使得反编译变得困难,但是不能完全阻止反编译。 Android 代码混淆可以通过...
高版本Android项目下的proguard-project.txt,里边包含了常规混淆,以及防止第三方混淆的代码。
Android 代码混淆三种方法详解 Android 代码混淆是指在将 Java 代码编译为.class 文件或将.apk 文件签名时,对代码进行混淆处理,以保护代码的安全性和知识产权。下面将介绍三种常见的 Android 代码混淆方法。 一...
Android代码混淆是一种常见的安全技术手段,它通过将代码中容易理解的部分转换成难以理解的形式来隐藏程序的真实逻辑,以此来增加对程序代码的理解难度。这种技术被广泛应用于Android应用的开发过程中,目的在于保护...
Android 代码混淆写法总结 Android 代码混淆是指在 Android 应用程序中对代码进行混淆处理,以保护代码的安全和 prevents 反编译。混淆可以将代码压缩,混淆文件,预检,优化等多种作用。 使用混淆的方式是通过在 ...
### Android代码混淆详解 #### 一、代码混淆概念与意义 **代码混淆**是指通过更改原始源代码中的类名、变量名、方法名等标识符为无意义的名称(如a、b、c等),使得代码变得难以阅读和理解的过程。这种技术常用于...
### Android代码混淆的使用情况分析 #### 一、引言 在移动互联网时代,Android作为全球最广泛使用的移动操作系统之一,其应用数量庞大且增长迅速。为了保护开发者的知识产权及提高应用的安全性,代码混淆技术成为...
本文将深入探讨Android代码混淆的原理、实现方法以及如何编写混淆规则。 首先,代码混淆(Obfuscated code)是将源代码转换为难以理解和分析的形式,其目的是增加反编译的难度,尽管不能完全防止反编译。混淆并不...
新写的proguard代码混淆的文档 大家可以看看
Android混淆打包不混淆第三方jar包Android 混淆打包不混淆第三方jar包
因此,了解并掌握Android的反编译和代码混淆技术对于保护应用的知识产权和用户数据至关重要。 **一、Android反编译** 1. ** Dex2Jar 和 JD-GUI**: Dex2Jar是一个将.dex文件转换为.jar文件的工具,而JD-GUI则是一个...
然而,在混淆代码时,可能会遇到一些问题,导致Gson无法正常工作。本文将深入探讨这些问题及其解决方案。 首先,我们要明白混淆的主要目的是为了减小应用的大小并增加反编译的难度。它会重命名类、方法和变量,这...
### Android 4.0 及以上版本 ProGuard 代码混淆详解 #### 一、ProGuard 简介 ProGuard 是一款广泛应用于 Android 开发中的代码混淆工具,它能够通过删除未使用的类、字段、方法等,从而缩小 APK 的体积,并提高...
iOS代码混淆工具,Uniapp代码混淆工具,react-native代码混淆, iOS代码混淆助手,Android代码混淆助手,Uniapp代码混淆助手,过机器审核,过4.3审核,过other审核,android、ios、uniapp、u3d、cocos2dx、flutter、...