android混淆及报错解决
android混淆及报错解决

android混淆及报错解决问题一:报错:Proguard returned with errorcode 1. See console proguard.ParseException: Unknownoption 'and' in argument number 9原因:查看你的工程目录里是否有空格或中文,有的改下就好了混淆步骤:使用android2.2.3以上版本创建工程,可以看到proguard.cfg,这就是混淆配置文件。
然后修改project.properties(android2.2以下应该是default.properties)文件:proguard.config=proguard.cfg 如果你的是android2.2.3以下的也可以找一个proguard.cfg拷贝过去,步骤一样。
但是你一定要看下你的SDK文件夹D:\android-SDK\tools\下一定得有proguard文件夹,这是负责混淆的问题二:使用外部jar文件,混淆出错!解决办法:在proguard.cfg改成-optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontpreverify-verbose-dontwarn-dontskipnonpubliclibraryclassmembers-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*如果还报错再试试解决办法:将proguard.cfg中的"-dontpreverify"改成“-dontoptimize”我的最终:-optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontoptimize-verbose-dontwarn-dontskipnonpubliclibraryclassmembers-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(ng.String);}-keep class * implements android.os.Parcelable {public static final android.os.Parcelable$Creator *;}。
android资源混淆方法

android资源混淆方法(原创实用版3篇)篇1 目录1.资源混淆的定义与作用2.混淆方法的种类3.混淆工具与使用4.混淆规则与配置5.混淆的优缺点篇1正文【1.资源混淆的定义与作用】资源混淆是 Android 开发中的一种常用技术,其主要目的是为了保护应用程序中的资源,防止别人轻易地分析和破解应用。
通过混淆,可以将原有的资源文件名和结构变得更加复杂,使得分析者难以理解其实际功能。
【2.混淆方法的种类】资源混淆的方法有很多种,常见的有以下几种:a.文件名混淆:通过修改资源文件的文件名,使其变得难以理解。
b.目录结构混淆:改变资源文件在文件系统中的目录结构,使其不易被发现。
c.资源名称混淆:对资源文件中的某些字段进行混淆,如 ID、样式等。
d.代码混淆:对代码中的资源引用进行混淆,使其与实际资源文件名不相关。
【3.混淆工具与使用】在 Android 开发中,常用的混淆工具有 ProGuard、R8 等。
这些工具可以帮助开发者自动进行资源混淆,简化操作流程。
使用这些工具时,需要按照其官方文档进行配置,以达到最佳的混淆效果。
【4.混淆规则与配置】在进行资源混淆时,需要根据项目需求和实际情况制定相应的混淆规则。
常见的混淆规则有:a.保留原始文件名b.使用特定的命名规则c.添加前缀或后缀d.利用 MD5、SHA-1 等哈希算法生成文件名在配置混淆规则时,还需要注意一些细节,如避免混淆规则冲突、确保混淆后的文件名唯一等。
【5.混淆的优缺点】资源混淆技术可以为 Android 应用提供一定程度的保护,降低被破解的风险。
然而,混淆也有一些缺点,如增加开发和调试的难度、可能影响应用程序性能等。
篇2 目录1.资源混淆的背景与原因2.资源混淆的方法3.资源混淆的实际应用4.资源混淆的优缺点篇2正文【资源混淆的背景与原因】Android 系统中的资源文件主要包括布局文件、图片文件、样式文件等。
为了保护开发者的知识产权,防止别人轻易地逆向破解应用,需要对资源文件进行混淆。
android databing 混淆规则 -回复

android databing 混淆规则-回复Android Data Binding 是一种强大的库,可以将布局文件与后台数据逻辑绑定在一起。
然而,在进行Android 应用程序混淆(ProGuard)时,我们需要采取一些额外步骤来确保Data Binding 正常工作。
本文将详细介绍Android Data Binding 的混淆规则以及在混淆应用程序时应如何处理。
首先,让我们了解一下为什么要混淆Android 应用程序。
混淆是指在应用程序编译过程中对代码进行优化和加密,以隐藏程序源代码并提高应用程序的安全性。
混淆可以使代码难以理解和逆向工程,并加大攻击者分析和修改应用程序的难度。
然而,在应用程序混淆期间,我们需要注意Data Binding 的特殊情况。
Data Binding 使用一种基于注解的方式将布局文件与Java 代码绑定在一起。
这些注解在编译期间被处理并生成相应的绑定类。
这意味着在混淆过程中,我们需要确保注解及其生成的绑定类不会被删除或重命名,否则会导致Data Binding 失效。
下面是一些可以遵循的Data Binding 混淆规则:1. 不要混淆Data Binding 注解:-keepclassmembers class * {androidx.databinding.BindingAdapter < * >;}-keepclassmembers class * {androidx.databinding.BindingMethod < *,** > ;}-keep class androidx.databinding. { *; }上述规则将保持Data Binding 注解不受混淆的影响,并确保生成的绑定类正确地与布局文件绑定。
2. 保留生成的绑定类:-keep class * extends androidx.databinding.ViewDataBinding { <init > (android.view.View);}-keepclasseswithmembernames class * {public < init > (android.content.Context,android.util.AttributeSet);}上述规则将保留生成的绑定类,以便Data Binding 在运行时正确绑定布局文件和视图。
android 函数参数防止混淆 -回复

android 函数参数防止混淆-回复如何在Android中防止函数参数的混淆在Android开发中,函数参数的混淆是一个常见的问题。
当一个函数拥有多个参数时,特别是参数类型相似或者参数个数较多时,很容易造成函数参数的混淆。
解决这个问题的方法有很多,本文将一步一步地介绍如何在Android中防止函数参数的混淆。
第一步:使用具有描述性的参数命名为了防止函数参数的混淆,我们应该使用具有描述性的参数命名。
在定义函数时,参数的命名应该能够清晰地表达参数的用途和含义。
比如,如果一个函数接收一个字符串类型的参数,我们可以将其命名为"stringParameter",而不是简单的"param"或者"str"。
通过使用具有描述性的参数命名,我们可以更好地理解和使用函数。
例如,在一个处理用户输入的函数中,我们可以使用以下命名:public void processUserInput(String userInput) {处理用户输入逻辑}第二步:使用注释描述参数除了使用具有描述性的参数命名外,我们还可以使用注释来进一步描述参数的用途和含义。
注释可以提供更详细的解释,帮助其他开发者更好地理解函数的参数。
在Android开发中,我们通常使用JavaDoc注释。
以下是一个使用注释描述参数的示例:/* 处理用户输入** @param userInput 用户输入的字符串*/public void processUserInput(String userInput) {处理用户输入逻辑}通过使用注释描述参数,我们可以确保其他开发者更容易理解参数的含义,从而避免参数的混淆。
第三步:使用不同类型的参数另一种防止函数参数混淆的方法是使用不同类型的参数。
我们可以根据参数的类型和含义,选择不同的数据类型来作为函数的参数。
比如,如果一个函数的参数既可以是整数类型,又可以是字符串类型,我们可以使用函数重载来区分这两种不同类型的参数。
android混淆规则

android混淆规则混淆是一种在编译和打包Android应用程序时使用的技术,它旨在增加应用程序代码的安全性,使其更难以被逆向工程分析和修改。
混淆规则是指在进行混淆时,开发者需要遵循的一些指导原则和规则,以确保混淆的有效性和正确性。
下面是一些常用的混淆规则:1. 启用混淆:在构建应用程序时应该启用混淆。
在Gradle构建文件中,可以通过将`minifyEnabled`属性设置为`true`来启用混淆。
5. 优化混淆:在混淆时,可以选择执行一些优化操作,以提高应用程序的性能。
可以通过在混淆规则文件中添加如下规则来实现:`-optimizations optimization_option`,其中`optimization_option`是优化选项,例如`-optimizations !code/allocation/variable`表示禁用代码分配和变量优化。
6. 保留资源文件:在混淆时,可以选择保留应用程序中的一些资源文件,例如图像、布局文件等。
可以通过在混淆规则文件中添加如下规则来实现:`-keepresources res/drawable/*.png`,其中`res/drawable/*.png`是需要保留的资源文件路径。
7. 避免过度混淆:在混淆时,应该避免对一些系统类进行过度混淆,以免影响应用程序的正常运行。
可以通过在混淆规则文件中添加如下规则来实现:`-keep class android.support.** { *; }`,其中`android.support.**`是需要保留的系统类的包路径。
8. 检查混淆结果:在完成混淆后,应该仔细检查混淆结果,确保应用程序的功能和性能没有受到任何负面影响。
可以通过在混淆规则文件中添加如下规则来实现:`-printmapping mapping.txt`,其中`mapping.txt`是混淆结果的输出文件。
总之,混淆是一种重要的安全措施,可以有效增加Android应用程序的安全性。
读懂Android中的代码混淆

读懂Android中的代码混淆本文为本人的一些实践总结,介绍一些混淆的知识和注意事项。
希望可以帮助大家更好的学习和使用代码混淆。
作者:技术小黑屋来源:知乎|2017-03-02 13:05收藏分享本文为本人的一些实践总结,介绍一些混淆的知识和注意事项。
希望可以帮助大家更好的学习和使用代码混淆。
什么是混淆关于混淆维基百科上该词条的解释为代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。
代码混淆影响到的元素有∙类名∙变量名∙方法名∙包名∙其他元素混淆的目的混淆的目的是为了加大反编译的成本,但是并不能彻底防止反编译.如何开启混淆∙通常我们需要找到项目路径下app目录下的build.gradle文件∙找到minifyEnabled这个配置,然后设置为true即可.一个简单的示例如下1. buildTypes {2.3. release {4.5. minifyEnabled true6.7. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'proguard是什么Java官网对Proguard的定义ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions. It renames the remaining classes, fields, and methods using short meaningless names. Finally, it preverifies the processed code for Java 6 or higher, or for Java Micro Edition.∙Proguard是一个集文件压缩,优化,混淆和校验等功能的工具∙它检测并删除无用的类,变量,方法和属性∙它优化字节码并删除无用的指令.∙它通过将类名,变量名和方法名重命名为无意义的名称实现混淆效果.∙最后它还校验处理后的代码混淆的常见配置-keepKeep用来保留Java的元素不进行混淆. keep有很多变种,他们一般都是∙-keep∙-keepclassmembers∙-keepclasseswithmembers一些例子保留某个包下面的类以及子包1. -keep public class .widget.**保留所有类中使用otto的public方法1. # Otto2.3. -keepclassmembers class ** {4.5. @com.squareup.otto.Subscribe public *;6.7. @com.squareup.otto.Produce public *;8.9. }保留Contants类的BOOK_NAME属性1. -keepclassmembers class com.example.admin.proguardsample.Constants {2.3. public static ng.String BOOK_NAME;4.5. }更多关于Proguard keep使用,可以参考官方文档-dontwarndontwarn是一个和keep可以说是形影不离,尤其是处理引入的library时.引入的library可能存在一些无法找到的引用和其他问题,在build时可能会发出警告,如果我们不进行处理,通常会导致build中止.因此为了保证build继续,我们需要使用dontwarn处理这些我们无法解决的library的警告.比如关闭Twitter sdk的警告,我们可以这样做1. -dontwarn com.twitter.sdk.**其他混淆相关的介绍,都可以通过访问官方文档获取.哪些不应该混淆反射中使用的元素如果一些被混淆使用的元素(属性,方法,类,包名等)进行了混淆,可能会出现问题,如NoSuchFiledException或者NoSuchMethodException等.比如下面的示例源码1. //Constants.java2.3. public class Constants {5. public static String BOOK_NAME = "book_name";6.7. }8.9. //MainActivity.java10.11. Field bookNameField = null;12.13. try {14.15. String fieldName = "BOOK_NAME";16.17. bookNameField = Constants.class.getField(fieldName);18.19. Log.i(LOGTAG, "bookNameField=" + bookNameField);20.21. } catch (NoSuchFieldException e) {22.23. e.printStackTrace();24.25. }如果上面的Constants类进行了混淆,那么上面的语句就可能抛出NoSuchFieldException.想要验证,我们需要看一看混淆的映射文件,文件名为mapping.txt,该文件保存着混淆前后的映射关系.1. com.example.admin.proguardsample.Constants -> com.example.admin.proguardsample.a:2.3. ng.String BOOK_NAME -> a4.5. void <init>() -> <init>6.7. void <clinit>() -> <clinit>8.9. com.example.admin.proguardsample.MainActivity -> com.example.admin.proguardsample.MainActivity:10.11. void <init>() -> <init>12.13. void onCreate(android.os.Bundle) -> onCreate从映射文件中,我们可以看到∙Constants类被重命名为a.∙Constants类的BOOK_NAME重命名了a然后,我们对APK文件进行反编译一探究竟.推荐一下这个在线反编译工具decompile Android .apk ✓ONLINE ✓注意,使用jadx decompiler后,会重新命名,正如下面注释/* renamed from: com.example.admin.proguardsample.a */所示.1. package com.example.admin.proguardsample;2.3. /* renamed from: com.example.admin.proguardsample.a */4.5. public class C0314a {6.7. public static String f1712a;8.9. static {10.11. f1712a = "book_name";12.13. }14.15. }而MainActivity的翻译后的对应的源码为1. try {2.3. Log.i("MainActivity", "bookNameField=" + C0314a.class.getField("BOOK_NAME"));4.5. } catch (NoSuchFieldException e) {6.7. e.printStackTrace();8.9. }MainActivity中反射获取的属性名称依然是BOOK_NAME,而对应的类已经没有了这个属性名,所以会抛出NoSuchFieldException.注意,如果上面的filedName使用字面量或者字符串常量,即使混淆也不会出现NoSuchFieldException异常。
android混淆原则

android混淆原则Android 混淆是一种对代码进行加密和混淆处理,以保护代码的安全性和增加逆向工程的难度。
在编写Android应用程序时,经常会使用一些开源库或者框架,这就需要进行混淆,以避免泄露源代码以及反编译出应用的详细信息。
本文将介绍Android混淆的原则和一些常用的混淆规则。
1.不混淆应用程序入口类入口类通常是指具有主函数的类,混淆这些类会导致应用无法启动。
因此,入口类通常不应混淆。
2.混淆关键类和方法名关键类和方法通常是应用程序的核心逻辑和功能所在,为保护代码的安全性和增加逆向工程的难度,这些类和方法通常需要进行混淆处理。
3. 不混淆Android SDK和第三方库的类和方法Android SDK和第三方库的类和方法通常已经经过充分测试和优化,进行混淆可能会导致应用程序运行异常或者功能失效。
因此,这些类和方法通常不应混淆。
4.不混淆资源文件和布局文件的名称资源文件和布局文件通常根据其名称在代码中进行引用,混淆这些名称会导致代码无法正确引用资源和布局文件。
因此,资源文件和布局文件的名称通常不应混淆。
5.对于内部类和内部方法,根据需要进行混淆内部类和内部方法通常是在对外部不可见的情况下被调用,因此,根据实际需求,可以选择对其进行混淆来增加代码的安全性。
6.混淆类和方法的参数、变量和属性名混淆参数、变量和属性名可以增加代码的安全性和逆向工程的难度。
通常情况下,开发者可以使用一些自动化工具来进行混淆,这些工具可以自动生成随机的名称并将其替换原有的名称。
7.混淆代码中的字符串代码中的字符串通常包含了一些敏感信息或者关键字,混淆这些字符串可以增加代码的安全性。
在混淆过程中,可以将字符串进行拼接、加密以及将其存储在其他文件中,从而增加逆向工程的难度。
8.使用混淆规则文件进行混淆混淆规则文件可以指定需要混淆的类、方法、参数、变量和属性名等信息,以及不需要进行混淆的一些类和方法。
在进行混淆前,可以编写混淆规则文件并告诉混淆工具使用这些规则文件进行混淆,从而更加灵活和精细地控制混淆的过程。
android 混淆规则

android 混淆规则一、什么是Android混淆Android混淆(obfuscation)是一种优化工具,它可以将代码以及相关的文件有效地进行混淆和加密,从而使代码更难被人理解和阅读,从而保护软件的源代码安全,避免在破解者的手里泄露。
二、Android混淆的目的Android混淆的目的是保护软件的源代码,使其难以被破解或者恶意的使用。
Android 混淆的过程是根据可执行文件的程序、类、变量、函数等内容自动生成。
通过混淆,将源代码混淆之后,破解者不可能识别其中的原理、内部结构和工作原理。
三、Android混淆规则1、改变代码中原来的函数、变量和类名。
2、为固定的字符串添加不可读的字符。
3、移除代码中没有使用的字符。
4、将可执行文件和可执行程序之间的依赖关系混淆掉。
5、将可执行文件中的特定字段替换成更加难识别的字段。
6、移除设置中的不必要的零件或者信息。
7、添加混淆代码和模块,拦截破解者的识别行为。
8、对代码进行优化,精简注释,增加可执行文件的体积。
9、删除在编译期间产生的辅助文件,如调试文件和日志文件。
10、利用安全技术,如数据加密、数字签名和令牌机制,保护应用程序不被恶意修改。
四、Android混淆的优缺点优点:1、可以减少文件的体积,改善APP的性能,减少使用的带宽等。
2、有效的加密防止恶意破解,提高应用程序的安全性。
3、有效可以防止程序泄漏。
4、可以提高APP程序的开发周期。
缺点:1、Android混淆过程会使软件变得复杂,从而影响软件及其依赖库的更新。
2、Android混淆后,APP可能不稳定,可能会造成应用程序出现崩溃等问题。
3、混淆可能会影响APP程序的索引,从而影响APP在市场上的发布和推广。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
android混淆及报错解决
问题一:报错:Proguard returned with error
code 1. See console proguard.ParseException: Unknownoption 'and' in argument number 9
原因:查看你的工程目录里是否有空格或中文,有的改下就好了
混淆步骤:使用android2.2.3以上版本创建工程,可以看到proguard.cfg,这就是混淆配置文件。
然后修改project.properties(android2.2以下应该是default.properties)文件:proguard.config=proguard.cfg 如果你的是android2.2.3以下的也可以找一个proguard.cfg拷贝过去,步骤一样。
但是你一定要看下你的SDK文件夹D:\android-SDK\tools\下一定得有proguard文件夹,这是负责混淆的
问题二:使用外部jar文件,混淆出错!
解决办法:在proguard.cfg改成
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-dontwarn
-dontskipnonpubliclibraryclassmembers
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
如果还报错再试试解决办法:将proguard.cfg中的"-dontpreverify"改成“-dontoptimize”
我的最终:
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontoptimize
-verbose
-dontwarn
-dontskipnonpubliclibraryclassmembers
-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(ng.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}。