android AAPT失去了一些资源

时间:2016-04-21 18:16:28

标签: android resources flags aapt

我的应用导入android.support.v7.appcompat。我的app和这个android jar都有资源文件colors.xml和strings.xml。如果我使用Android Studio 1.5来构建它,我的应用程序运行良好。但是当我尝试使用Android.mk与我的系统的其余部分一起构建它时,应用程序每次都会崩溃。它归结为以下行,返回0长度的字段,而不是资源文件中定义的许多颜色。

    Field[] fields = R.color.class.getFields();

我使用java反编译来比较android studio和Android.mk构建的两个apk文件。好的一个在android.support.v7.appcompat和我自己的资源R.class中都有R.color类。坏的一个有一个空的颜色类。我看到中间文件夹中的R.java仍然有所有颜色,但它在apk中丢失了。     //好     公共静态最终类颜色     {         public static final int abc_background_cache_hint_selector_material_dark = 2131624259;       .....     }     //坏:     public static final class color {}

起初我猜我错过了Android.mk中的一个标记或选项,我从其他应用程序复制了。但我发现Android.mk构建的其他Android应用程序也没有颜色资源。它们没问题因为它们不使用这种颜色资源。那么Android Studio和Android.mk有什么区别?我该如何解决?

我的系统是android 5.1.1。 我的Android.mk看起来像这样。注释掉的行显示我尝试了这些选项但没有奏效。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

#Include res dir from libraries
#appcompat_dir := prebuilts/sdk/current/support/v7/appcompat
#appcompat_dir := frameworks/support/v7/appcompat
#appcompat_dir := ../../../../../../../../../android-sdk-linux/extras/android/support/v7/appcompat/res
appcompat_dir := 
res_dirs := res libs/v7/appcompat/res

LOCAL_STATIC_JAVA_LIBRARIES := android-support-v7-appcompat
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4

$(warning LOCAL_STATIC_JAVA_LIBRARIES is '$(LOCAL_STATIC_JAVA_LIBRARIES)')

$(warning TARGET_BUILD_APPS is '$(TARGET_BUILD_APPS)')
LOCAL_SRC_FILES := $(call all-java-files-under, java)

LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))
#LOCAL_RESOURCE_DIR += $(appcompat_dir)/res

$(warning LOCAL_RESOURCE_DIR is '$(LOCAL_RESOURCE_DIR)')

LOCAL_AAPT_FLAGS := --auto-add-overlay
LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.appcompat

LOCAL_MODULE_TAGS := optional

LOCAL_PACKAGE_NAME := MyApp

LOCAL_CERTIFICATE := platform

LOCAL_PROGUARD_FLAG_FILES := proguard.flags 

include $(BUILD_PACKAGE)

#include $(CLEAR_VARS)

#LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := externalappcompatv7:libs/v7/appcompat/libs/android-support-v7-appcompat.jar
#include $(BUILD_MULTI_PREBUILT)

#include $(call all-makefiles-under,$(LOCAL_PATH))

1 个答案:

答案 0 :(得分:0)

我最终修改了我用来避免迭代资源中所有颜色的第三方java库。因此,避免崩溃。