Как включить proguard с флагом -assumenosideeffects в файле Android.MK
Я пытаюсь скомпилировать свое приложение с помощью 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
1 ответ
В настоящее время мы не можем напрямую использовать assumenosideeffects
Объяснение: Android asop build tree не поддерживает assumenosideeffects
из-за сервера сборки джек. Джек использует файлы конфигурации 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