好长时间没有写技术博客了,转眼间已经有5年没有写,最近有点时间,打算把这几年里积累都发表贡献出来,希望广大博友多支持和拍砖,进入正题。
android 开发过程中会遇到自己开发(封装)的jar包需要提供给别人使用,这时候又不想把源码暴露给他人,所以就会用到jar包混淆 。再有就是网络提共的很多示例或者其它人写的方法都不起作用,经过小弟一周多来的努力,终于成功了,以下就是经验之谈。
1、下载最新的混淆工具
如果jdk 是1.8及以上的,下载地址:http://proguard.sourceforge.net/index.html#downloads.html
如果jdk 是1.8以下的,用sdk 自带的就可以,路径在“你的sdk路径\tools\proguard”
2、接下来就是编写pro文件了。
相信很多人都试过N多个混淆文件,但是虽然混淆成功了最终运行还是失败了,以下是我的文件, 以下文件可以正常混淆且运行无错,可以放心的修改吧,记住一定要把注释去掉才能使用。
//需要混淆的jar包 -injars 'D:\ProGuard\acquireurlhistory.jar' //混淆成功后生成的jar包 -outjars 'D:\ProGuard\output\mj_sdk_20160425.jar' //你开的的jar包里需要引用的第三方jar包,这些jar包我都放在我的D盘上 -libraryjars 'D:\Program Files\Java\jdk1.8.0_73\jre\lib\rt.jar' -libraryjars 'D:\ProGuard\libs\android.jar' -libraryjars 'D:\ProGuard\libs\annotations.jar' -libraryjars 'D:\ProGuard\libs\dbutil.jar' -libraryjars 'D:\ProGuard\libs\mjoysmaster.jar' -libraryjars 'D:\ProGuard\libs\protobuf-java-2.5.0.jar' -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -optimizationpasses 5 -dontusemixedcaseclassnames //原数据 不能混淆 -keepattributes *Annotation* -verbose //你开发的jar包里引用到的R文件 不需要混淆 -dontwarn com.androld.tools.R* -keep class org.apache.3rdparty.stuff.** -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 //这是我开放出来给别人调用的sdk 入口 ,要排除掉,不能混淆 -keep class com.androld.tools.mjoys.MjoysSdkAgent { <fields>; <methods>; } //同理,DB 的初始化要开放出来 -keep class com.androld.tools.common.MJDBHelper { <fields>; <methods>; } //开放接口里的方法也不能混淆 -keepclassmembers public class com.androld.tools.mjoys.MjoysSdkAgent { public static <fields>; } //同上 -keepclassmembers public class com.androld.tools.common.MJDBHelper { public static <fields>; } -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); } -keep class * extends android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -keepclasseswithmembers,allowshrinking class * { native <methods>; } # Also keep - Enumerations. Keep the special static methods that are required in # enumeration classes. -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); }
以上用注释的地方就是我自己的需要,所以我做了修改,其它没有加注释的,就是不要修改了,相信大家看其它人写的和我这的都一样,所以不作多解释。
3、进入proGuard的bin目录
看到以下界面 :
如果文件编写错误,就会提示错吴,仔细观察文件是不是那里注释没有删除掉还是那里语法写错误。之后点击左边的process 进入混淆界面,点击右下角的process 开始混淆,如果内容里看到successfully 说明混淆成功,但是不一定运行不报错,所以要测试混淆好的jar包是否可用,也可以看看你的代码里那里出错,再按以上方法,把你的类或者方法排除不混淆,直到成功。
至此,已经完成,我搞了一周才能搞好,大家加油吧,我把我的proGuard文件放到附件里供大家下载。
相关推荐
- **优化**:最后,使用dex2jar等工具将Java类文件转换回Dex格式,并可能用ProGuard进行混淆,以增加反编译的难度。 2. **jd-gui**: jd-gui是由Jochen Hoenicke开发的一个图形界面工具,用于快速查看Java字节码...
这就是Android反编译工具包的作用。本文将深入探讨其中的主流工具——Apktool,以及如何利用它来进行APK的反编译。 Apktool是一款强大的开源工具,专为Android开发者设计,用于解包和重新打包APK文件。它能够解析...
首先,AAPT是Android SDK的一部分,它负责处理应用程序资源,如图片、布局文件、字符串等。AAPT的主要功能包括: 1. **资源编译**:将XML资源文件转换为二进制格式,以便于Android系统快速解析。 2. **资源打包**:...
6. **版本更新**:从2.2.4到2.9.3,Apktool经历了多次更新,修复了诸多bug,增强了稳定性,增加了对新版本Android SDK的支持,使得其在处理现代APK时更加得心应手。 **Apktool的使用步骤** 1. **安装Apktool**:...
6. **支持多种版本**: APKTool适用于不同版本的Android SDK,使其在处理各种APK时具有广泛的兼容性。 ### 使用APKTool的步骤 1. **下载和安装**: 获取apktool.jar文件,将其放置在一个方便的目录,并确保JRE(Java...
4. **dex2jar**:工具用于将Dalvik Executable (DEX) 文件转换为Java的jar文件,便于用Java反编译器进一步处理。 反编译步骤如下: 1. **获取APK文件**:首先,你需要有一个想要反编译的APK文件。 2. **安装JDK**...
- **dexdump**:Android SDK自带的命令行工具,可以显示.dex文件的详细信息。 在实际工作中,开发者可能会结合使用上述工具,以获取更全面的APK分析结果。但记住,理解反编译的目的和限制,以及遵守相关法规,是...
**Android工具:Apktool详解** Apktool是一款强大的Android反编译工具,它主要用于解析APK文件,帮助开发者深入理解APK的内部结构,学习并借鉴其他应用的优秀算法和设计。通过Apktool,我们可以对APK进行解包、修改...
对于进行了混淆处理的DEX文件,反编译后的代码可能难以理解。此外,Apktool无法解密加密的资源或还原资源的原始值。 6. **注意事项** 使用Apktool进行反编译应遵循合法和道德的原则,不得用于非法目的,如侵犯他人...
通过使用Ant构建工具,结合ProGuard进行代码混淆,并完成最终的签名操作,可以极大地提高Android应用的构建效率,同时也能有效保护应用的安全性。本篇文章提供了一个完整的示例,可以帮助开发者快速实现自动化打包...
开发者可以通过混淆代码、加固等方式来防止应用被轻易反编译,例如使用ProGuard或R8混淆工具。 通过以上步骤,你可以理解Android应用的反编译过程,掌握修改资源文件和代码的基本方法。然而,这只是一个基础教程,...
- 遇到`could not decode arsc file`错误时,可能是因为APK使用了较新的Android SDK版本,这时可以尝试更新Apktool或者使用特定版本的SDK。 3. **Smali代码**: - 当反编译过程中无法获取到Java源代码时,我们...
6. **签名与优化**:如果ApktoolPlus集成了签名和zipalign,那么在打包后可以直接执行这两个步骤,否则需要使用Android SDK提供的工具进行签名和优化。 7. **安装与测试**:最后,将签名并优化后的APK安装到设备上...
2. **依赖问题**: 反编译的应用可能依赖特定的 Android SDK 版本或库,打包时需要保证这些依赖项被正确处理。 3. **混淆代码**: 如果原始应用进行了代码混淆,反编译后的代码可能难以理解,需要借助其他逆向工程...
在压缩包中,`aapt.exe`是Android Asset Packaging Tool的命令行工具,它是Android SDK的一部分,用于处理应用程序的资源,如创建、提取、打包和编译资源。`apktool.bat`是一个批处理文件,方便Windows用户通过...
在Android开发领域,有时我们需要对已有的APK文件进行反编译,以便查看其源代码、资源文件或进行二次开发。APK反编译是一种逆向工程的技术,它可以帮助我们理解应用程序的工作原理,修复错误,或者学习其他开发者的...
Android Asset Packaging Tool(aapt)是Android SDK的一部分,它负责处理应用的资源,包括创建资源表、编译资源文件和生成R.java类。在Apktool的反编译和打包过程中,aapt用于生成和验证APK的资源部分。 5. **...
### Android Jenkins 使用与常见问题详解 #### 一、Android Jenkins 的...通过以上详细的解析和解决步骤,可以帮助开发者更好地理解和处理在使用 Jenkins 构建 Android 项目时可能遇到的问题,提高构建效率和质量。
1. **混淆代码**:使用ProGuard或R8等混淆工具对DEX文件进行混淆,使得反编译后的代码难以阅读和理解。 2. **加密资源**:敏感数据不应直接存储在资源文件中,而应加密处理并在运行时解密。 3. **数字签名**:确保...
Android SDK是进行Android应用开发和测试的基础工具,UIAutomator要求SDK版本高于API 15。 - **下载地址**:http://developer.android.com/sdk/index.html - **安装路径**:选择合适的安装位置,例如`E:\tools`。 -...