【问题标题】:how to enable proguard with -assumenosideeffects flag in Android.MK file如何在 Android.MK 文件中使用 -assumenosideeffects 标志启用 proguard
【发布时间】:2018-05-24 06:00:28
【问题描述】:

我正在尝试使用 AOSP 编译我的应用程序并且构建正确。我对使用 proguard 标志有疑问。

-assumenosideeffects.

我试图在我的最终构建中删除 Log 语句,因此 在我的 proguard 文件中使用以下内容,

-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}

我的 Android.mk 文件条目看起来像这样

LOCAL_PROGUARD_ENABLED := obfuscation optimization
LOCAL_PROGUARD_FLAG_FILES := proguard.flags

我尝试了各种组合。我确保优化是 启用。 如果我用来构建 Android 工作室,它工作正常。

在使用 AOSP 编译时,有什么方法可以使这项工作正常进行吗?

我的 Android.mk 文件

LOCAL_PATH:= $(call my-dir)
ifneq ($(TARGET_BUILD_PDK), true)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \
frameworks/support/v7/appcompat/res \
frameworks/support/design/res
LOCAL_PACKAGE_NAME := Progurdsample
LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-appcompat
LOCAL_CERTIFICATE := platform
LOCAL_MODULE_TAGS := optional
TARGET_ABI := x86_64
LOCAL_PRIVILEGED_MODULE := true
LOCAL_USE_AAPT2 := true
LOCAL_DEX_PREOPT := false
LOCAL_PROGUARD_ENABLED := custom
LOCAL_JACK_ENABLED := incremental
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
LOCAL_AAPT_FLAGS := --auto-add-overlay
LOCAL_AAPT_FLAGS += --extra-packages    android.support.v7.appcompat:android.support.v7.gridlayout
include $(BUILD_PACKAGE)
endif

【问题讨论】:

    标签: android android-source android-build android-make


    【解决方案1】:

    目前我们不能直接使用assumenosideeffects

    解释: 由于 jack 构建服务器,Android asop 构建树不支持assumenosideeffects。Jack 使用 proguard 配置文件来启用收缩和混淆。但是杰克会忽略一些选项。 被忽略的选项包括:

    -dontoptimize // Jack does not optimize 
    -dontpreverify // Jack does not preverify 
    -skipnonpubliclibraryclasses 
    -dontskipnonpubliclibraryclasses 
    -dontskipnonpubliclibraryclassmembers 
    -keepdirectories 
    -target 
    -forceprocessing 
    -printusage 
    -whyareyoukeeping 
    -optimizations 
    -optimizationpasses 
    -assumenosideeffects 
    -allowaccessmodification 
    -mergeinterfacesaggressively 
    -overloadaggressively 
    -microedition 
    -verbose 
    -dontnote 
    -dontwarn 
    -ignorewarnings 
    -printconfiguration 
    -dump 
    

    参考:https://source.android.com/setup/build/jack

    但是我们可以做一个解决方法,

    在 Makefile 中,我们可以使用禁用 jack 构建服务器 ANDROID_COMPILE_WITH_JACK =false

    完整的 Android.mk 文件看起来像,

    LOCAL_PATH:= $(call my-dir)
    ifneq ($(TARGET_BUILD_PDK), true)
    include $(CLEAR_VARS)
    LOCAL_SRC_FILES := $(call all-java-files-under, src)
    LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \
    frameworks/support/v7/appcompat/res \
    frameworks/support/design/res
    LOCAL_PACKAGE_NAME := Progurdsample
    LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4
    LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-appcompat
    LOCAL_CERTIFICATE := platform
    LOCAL_MODULE_TAGS := optional
    TARGET_ABI := x86_64
    LOCAL_PRIVILEGED_MODULE := true
    LOCAL_USE_AAPT2 := true
    LOCAL_DEX_PREOPT := false
    LOCAL_PROGUARD_ENABLED := custom
    ANDROID_COMPILE_WITH_JACK := false
    LOCAL_PROGUARD_FLAG_FILES := proguard.flags
    LOCAL_AAPT_FLAGS := --auto-add-overlay
    LOCAL_AAPT_FLAGS += --extra-packages    android.support.v7.appcompat:android.support.v7.gridlayout
    include $(BUILD_PACKAGE)
    endif
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 2015-03-06
      • 1970-01-01
      • 2019-05-12
      相关资源
      最近更新 更多