Android源码混淆编译app

在源码中编译app,除了需要准备好app的源码之外,当然需要准备好Android.mk,因此线上makefile

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := \
    $(call all-subdir-java-files) \

LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4  jarnickname

LOCAL_PACKAGE_NAME := AAAA
LOCAL_CERTIFICATE := platform

LOCAL_PROGUARD_ENABLED := nosystem
LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.cfg

include $(BUILD_PACKAGE)

include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := jarnickname:libs/xxx.jar
include $(BUILD_MULTI_PREBUILT)


这里关于各个变量的含义就不再说明了,网上有很多文章,但是这是一个比较通用的模板。


下面着重讲一下如何保护我们的代码——混淆

LOCAL_PROGUARD_ENABLED := nosystem
LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.cfg

这2行主要就是用来混淆编译的,LOCAL_PROGUARD_ENABLED 的变量值在android4.4中有些变化:

4.2 版本:

  • 支持full, custom, optonly三种,其中optonly的作用是增加 proguard_flags += -dontobfuscate,即不做混淆(但是其他优化和压缩都会做)
  • 默认会使用系统的proguard.flags(在build/core目录下)

4.4版本:

  • 支持full, custom, nosystem, obfuscation, optimization属性
  • nosystem,是指不使用系统的proguard.flags
  • obfuscation,是指做混淆,如果该值空,则会加上-dontobfuscate的标识
  • optimization,优化,如果该值为空,则会加上-dontoptimize的标识

接下来讲一下LOCAL_PROGUARD_FLAG_FILES和LOCAL_PROGUARD_FLAGS的区别
在java.mk中有如下2句
proguard_flag_files := $(addprefix $(LOCAL_PATH)/, $(LOCAL_PROGUARD_FLAG_FILES))
LOCAL_PROGUARD_FLAGS += $(addprefix -include , $(proguard_flag_files))

这就说明了无论我们指定哪个,最终都会被赋值到LOCAL_PROGUARD_FLAGS中,因此二者皆可。唯一要注意的是LOCAL_PROGUARD_FLAG_FILES会被自动加上$(LOCAL_PATH)/的前缀,所以使用时路劲直接写app根目录开始。
而LOCAL_PROGUARD_FLAGS 则要向我上面这样写。否则会编译报错 Unknown option 'proguard.cfg' 。

最终编译prguard的时候会用到:
$(full_classes_proguard_jar): PRIVATE_PROGUARD_FLAGS := $(proguard_flags) $(LOCAL_PROGUARD_FLAGS)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值