1.在需要混淆的工程目录下(package/apps/下的工程)添加proguard.flags文件,该文件即为网络传说中的proguard.cfg,只是命名不一样而已,然后再Android.mk中添加如下两句:
LOCAL_PROGUARD_ENABLED := full
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
上面的full 也可以是custom,如果不写这句,那还得添加如下一句:
TARGET_BUILD_VARIANT := user或者TARGET_BUILD_VARIANT := userdebug
这样后在工程目录下执行mm便可以看到在out/target/common/obj/APPS/目录下生成了形如proguard.classes.jar的东东,这就说明已在编译中启动了proguard
但反编译一看,并未出现网络云说的abcd替代符号,其实代码并未真正混淆:
android在编译时默认关闭了混淆选项,有去研究build/core目录的同志会发现这里也有个proguard.flags文件,其实在 proguard的过程中,编译器会调用包括本地目录下和系统定义了的多个proguard.flags文件,而在这个文件中混淆的选项被禁止了,故而编 译出来的apk仍未混淆。因此将如下句子注释掉便可实现真正的混淆编译:
# Don't obfuscate. We only need dead code striping.
-dontobfuscate(将该句加个#号注释掉)
2.proguard.flags的源码如下:
-optimizationpasses 5
-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 *;
}
3 。好奇的同志还可以继续看看,为什么TARGET_BUILD_VARIANT := user和LOCAL_PROGUARD_ENABLED := full二选一即可,详见build/core/package.mk:
LOCAL_PROGUARD_ENABLED:=$(strip $(LOCAL_PROGUARD_ENABLED))
ifndef LOCAL_PROGUARD_ENABLED
ifneq ($(filter user userdebug, $(TARGET_BUILD_VARIANT)),)
# turn on Proguard by default for user & userdebug build
LOCAL_PROGUARD_ENABLED :=full
endif
endif
ifeq ($(LOCAL_PROGUARD_ENABLED),disabled)
# the package explicitly request to disable proguard.
LOCAL_PROGUARD_ENABLED :=
endif
proguard_options_file :=
ifneq ($(LOCAL_PROGUARD_ENABLED),custom)
ifneq ($(all_resources),)
proguard_options_file := $(package_expected_intermediates_COMMON)/proguard_options
endif # all_resources
endif # !custom
LOCAL_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_PROGUARD_FLAGS)
相关推荐
dex2jar是一款常用的Android反编译工具,它能够将DEX(Dalvik Executable)文件转换为JAR文件,然后使用JD-GUI或者JD-Core等Java反编译器将JAR文件反编译回Java源码。为了防御这种情况,开发者可以采用以下方法: 1...
android源码混淆避免反编译[参照].pdf
本文将详细解释Android源码混淆的原理和应用。 首先,我们要明确混淆的目标:阻止他人通过反编译获取到源代码的可读性。由于Java程序的字节码(.class文件)很容易通过反编译工具(如JD-GUI或FernFlower)转换回...
在Android开发领域,反编译源码是一种常见的技术手段,用于理解APK文件的工作原理、学习第三方库的实现或者进行安全分析。本文将详细介绍“android反编译源码”这一主题,包括反编译工具、过程以及反编译后的源码...
在Android 7.0相机源码中,JNI层可能会包含与硬件驱动交互的代码,这些代码负责与硬件直接通信,实现低级别的控制和优化,如帧率调整、曝光控制等。 四、src目录 src目录包含了所有Java源代码,包括相机服务、相机...
在Android开发中,为了保护应用的安全性和优化代码,开发者通常会使用ProGuard工具进行混淆编译。本篇文章将聚焦于如何在Eclipse和IntelliJ IDEA(Idea)这两个不同的集成开发环境中配置并使用ProGuard,以实现对Ant...
在Android应用开发中,SO(Shared Object)文件是C或C++编译后的动态链接库,它们包含了应用程序的重要逻辑和敏感代码。为了提高应用的安全性,开发者常常需要对这些SO文件进行保护,防止恶意攻击者逆向工程分析,...
4. **ProGuard** 的逆操作工具,如 **dexGuard** 或 **Obfuscator-IL**:ProGuard是Android开发中常用的代码混淆工具,这些逆操作工具可以帮助我们还原被混淆的代码。 5. **Smali/baksmali**:Smali是一种Dalvik...
在Android应用开发中,为了提高应用的安全性和优化代码体积,开发者常常会进行代码混淆和打包。ProGuard是一款强大的Java字节码混淆、优化、预校验和分析工具,它可以为我们的Android项目提供必要的保护,防止恶意...
首先,Android源码反编译涉及到的主要工具有: 1. **Apktool**:这是一个开源的工具,用于解包和重新打包Android应用。它能解析APK中的资源文件,包括XML布局、图片和音频等,并将其以可读的形式呈现出来。 2. **...
然而,出于安全和隐私考虑,APK文件通常被混淆和加密,使得直接查看源码变得困难。为了分析、学习或者调试APK,开发者有时需要进行反编译操作。本文将详细介绍如何使用"android_apk反编译工具",包括dex2jar和JD-GUI...
"去哪Android客户端反编译源码(仅供学习)"是一个面向学习目的的资源,提供了对去哪网Android应用程序的源代码分析机会。这个资源的标签"去哪"、"去哪源码"、"去哪安卓源码"明确了我们关注的是去哪网的Android应用...
由于Android应用主要使用Java语言编写,并且APK文件本质上是可被解压的ZIP文件,因此容易受到反编译工具的攻击,暴露源码,甚至可能导致敏感信息泄露。为了对抗这种威胁,开发者通常会采用代码混淆技术,其中...
* 在反编译后的代码中,可能会包含一些不可读的代码,这是因为源码经过 ProGuard 混淆后的结果。 * 在反编译 APK 的过程中,可能会遇到一些防反编译的措施,例如一些 app 会进行防反编译的保护,但这并不影响我们...
在Android开发领域,有时我们需要对APK文件进行反编译以了解其内部结构、源代码或进行二次开发。"Android一键反编译"是这样的一个工具,它简化了原本复杂的过程,让开发者和逆向工程师可以更高效地探索APK的内部工作...
3. **修改源码**: 在解压后的目录中,用户可以自由地修改反编译出的XML文件和其他资源。 4. **重新打包**: 修改完成后,使用`apktool b`命令可以将修改后的源码重新打包成一个新的APK。需要注意的是,重新打包的APK...
描述中的"open camera Android源码"指的是Open Camera项目的原始代码,这为开发者提供了深入理解相机应用工作原理的机会。"适配Android Studio"意味着这个项目已经被更新或配置,以便在最新的Android开发环境中无缝...
在反编译过程中,可能会遇到的问题包括代码混淆,这是开发者为了保护源码不被轻易理解而进行的一种加密方式。混淆后的代码命名混乱,逻辑复杂,增加了反编译的难度。不过,有些高级的反编译工具可以尝试还原混淆的...
本文将深入探讨“Android APK反编译文件”这一主题,包括如何进行反编译,以及反编译过程中的关键知识点。 首先,让我们了解什么是APK反编译。APK反编译是将已编译的APK文件转换回其源代码形式,以便分析和理解其...
在Android源码开发实战中,第11.12章节主要涵盖了Android系统级别的开发和调试技巧,这包括但不限于深入理解Android内核、框架层以及应用层的交互机制。这一部分的知识点广泛且深入,旨在帮助开发者提升对Android...