0

我正在尝试使用 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 Studio,它工作正常。

在使用 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
4

1 回答 1

0

目前我们不能直接使用assumenosideeffects

说明:assumenosideeffects由于 jack 构建服务器, 不支持 Android asop 构建树。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 我们可以禁用千斤顶构建服务器使用 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
于 2018-05-30T04:42:32.870 回答