diff options
author | Bjorn Bringert <bringert@android.com> | 2013-03-18 21:17:26 +0000 |
---|---|---|
committer | Bjorn Bringert <bringert@android.com> | 2013-04-26 15:07:09 +0100 |
commit | fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4 (patch) | |
tree | 6db6caa0c8d1cb6ac02175c5e2721fc8e5e605dd | |
parent | 007d4d7040c9b41de584e79ba7dbd15d25f54971 (diff) |
Allow compiling aapt for the device
Changes:
- The static device version of libandroidfw now includes
the extra functions needed by aapt. I could only find
a few host tools that use the static library, so this is
hopefully not a problem.
- The pseudolocalization code is moved into aapt.
It was previously in libhost, but only used by aapt.
Change-Id: Ib393ebb7dcebee8abbb628cbe5255ea1679674ac
-rw-r--r-- | include/androidfw/ResourceTypes.h | 2 | ||||
-rw-r--r-- | libs/androidfw/Android.mk | 3 | ||||
-rw-r--r-- | libs/androidfw/ResourceTypes.cpp | 4 | ||||
-rw-r--r-- | tools/aapt/Android.mk | 43 | ||||
-rw-r--r-- | tools/aapt/XMLNode.cpp | 2 | ||||
-rw-r--r-- | tools/aapt/pseudolocalize.cpp | 119 | ||||
-rw-r--r-- | tools/aapt/pseudolocalize.h | 9 |
7 files changed, 173 insertions, 9 deletions
diff --git a/include/androidfw/ResourceTypes.h b/include/androidfw/ResourceTypes.h index 5b45d708726c..ccccc2e68671 100644 --- a/include/androidfw/ResourceTypes.h +++ b/include/androidfw/ResourceTypes.h @@ -1553,7 +1553,7 @@ public: static bool getIdmapInfo(const void* idmap, size_t size, uint32_t* pOriginalCrc, uint32_t* pOverlayCrc); -#ifndef HAVE_ANDROID_OS +#ifdef STATIC_ANDROIDFW_FOR_TOOLS void print(bool inclValues) const; static String8 normalizeForOutput(const char* input); #endif diff --git a/libs/androidfw/Android.mk b/libs/androidfw/Android.mk index 3ed75a2988bc..018ed4046124 100644 --- a/libs/androidfw/Android.mk +++ b/libs/androidfw/Android.mk @@ -52,6 +52,8 @@ LOCAL_MODULE:= libandroidfw LOCAL_MODULE_TAGS := optional +LOCAL_CFLAGS += -DSTATIC_ANDROIDFW_FOR_TOOLS + LOCAL_C_INCLUDES := \ external/zlib @@ -92,6 +94,7 @@ include $(BUILD_SHARED_LIBRARY) ifeq ($(TARGET_OS),linux) include $(CLEAR_VARS) +LOCAL_CFLAGS += -DSTATIC_ANDROIDFW_FOR_TOOLS LOCAL_C_INCLUDES += \ external/skia/include/core \ external/zlib \ diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp index a7300652077b..9c585136b620 100644 --- a/libs/androidfw/ResourceTypes.cpp +++ b/libs/androidfw/ResourceTypes.cpp @@ -5324,7 +5324,7 @@ bool ResTable::getIdmapInfo(const void* idmap, size_t sizeBytes, } -#ifndef HAVE_ANDROID_OS +#ifdef STATIC_ANDROIDFW_FOR_TOOLS #define CHAR16_TO_CSTR(c16, len) (String8(String16(c16,len)).string()) #define CHAR16_ARRAY_EQ(constant, var, len) \ @@ -5621,6 +5621,6 @@ void ResTable::print(bool inclValues) const } } -#endif // HAVE_ANDROID_OS +#endif // STATIC_ANDROIDFW_FOR_TOOLS } // namespace android diff --git a/tools/aapt/Android.mk b/tools/aapt/Android.mk index 9b1658ac6de9..7934757c67e6 100644 --- a/tools/aapt/Android.mk +++ b/tools/aapt/Android.mk @@ -7,10 +7,8 @@ # This tool is prebuilt if we're doing an app-only build. ifeq ($(TARGET_BUILD_APPS),) -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) -LOCAL_SRC_FILES := \ +aapt_src_files := \ AaptAssets.cpp \ Command.cpp \ CrunchCache.cpp \ @@ -24,23 +22,27 @@ LOCAL_SRC_FILES := \ ResourceTable.cpp \ Images.cpp \ Resource.cpp \ + pseudolocalize.cpp \ SourcePos.cpp \ ZipEntry.cpp \ ZipFile.cpp +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(aapt_src_files) LOCAL_CFLAGS += -Wno-format-y2k ifeq (darwin,$(HOST_OS)) LOCAL_CFLAGS += -D_DARWIN_UNLIMITED_STREAMS endif +LOCAL_CFLAGS += -DSTATIC_ANDROIDFW_FOR_TOOLS LOCAL_C_INCLUDES += external/libpng LOCAL_C_INCLUDES += external/zlib -LOCAL_C_INCLUDES += build/libs/host/include LOCAL_STATIC_LIBRARIES := \ - libhost \ libandroidfw \ libutils \ libcutils \ @@ -64,4 +66,35 @@ LOCAL_MODULE := aapt include $(BUILD_HOST_EXECUTABLE) +# aapt for running on the device +# ========================================================= +ifneq ($(SDK_ONLY),true) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(aapt_src_files) + +LOCAL_MODULE := aapt + +LOCAL_C_INCLUDES += bionic +LOCAL_C_INCLUDES += bionic/libstdc++/include +LOCAL_C_INCLUDES += external/stlport/stlport +LOCAL_C_INCLUDES += external/libpng +LOCAL_C_INCLUDES += external/zlib + +LOCAL_CFLAGS += -DSTATIC_ANDROIDFW_FOR_TOOLS +LOCAL_CFLAGS += -Wno-non-virtual-dtor + +LOCAL_STATIC_LIBRARIES := \ + libstlport_static \ + libandroidfw \ + libutils \ + libcutils \ + libexpat_static \ + libpng \ + liblog \ + libz + +include $(BUILD_EXECUTABLE) +endif + endif # TARGET_BUILD_APPS diff --git a/tools/aapt/XMLNode.cpp b/tools/aapt/XMLNode.cpp index dcbe7db7c54c..a663ad58fc55 100644 --- a/tools/aapt/XMLNode.cpp +++ b/tools/aapt/XMLNode.cpp @@ -6,8 +6,8 @@ #include "XMLNode.h" #include "ResourceTable.h" +#include "pseudolocalize.h" -#include <host/pseudolocalize.h> #include <utils/ByteOrder.h> #include <errno.h> #include <string.h> diff --git a/tools/aapt/pseudolocalize.cpp b/tools/aapt/pseudolocalize.cpp new file mode 100644 index 000000000000..9e50c5ac5eb1 --- /dev/null +++ b/tools/aapt/pseudolocalize.cpp @@ -0,0 +1,119 @@ +#include "pseudolocalize.h" + +using namespace std; + +static const char* +pseudolocalize_char(char c) +{ + switch (c) { + case 'a': return "\xc4\x83"; + case 'b': return "\xcf\x84"; + case 'c': return "\xc4\x8b"; + case 'd': return "\xc4\x8f"; + case 'e': return "\xc4\x99"; + case 'f': return "\xc6\x92"; + case 'g': return "\xc4\x9d"; + case 'h': return "\xd1\x9b"; + case 'i': return "\xcf\x8a"; + case 'j': return "\xc4\xb5"; + case 'k': return "\xc4\xb8"; + case 'l': return "\xc4\xba"; + case 'm': return "\xe1\xb8\xbf"; + case 'n': return "\xd0\xb8"; + case 'o': return "\xcf\x8c"; + case 'p': return "\xcf\x81"; + case 'q': return "\x51"; + case 'r': return "\xd2\x91"; + case 's': return "\xc5\xa1"; + case 't': return "\xd1\x82"; + case 'u': return "\xce\xb0"; + case 'v': return "\x56"; + case 'w': return "\xe1\xba\x85"; + case 'x': return "\xd1\x85"; + case 'y': return "\xe1\xbb\xb3"; + case 'z': return "\xc5\xba"; + case 'A': return "\xc3\x85"; + case 'B': return "\xce\xb2"; + case 'C': return "\xc4\x88"; + case 'D': return "\xc4\x90"; + case 'E': return "\xd0\x84"; + case 'F': return "\xce\x93"; + case 'G': return "\xc4\x9e"; + case 'H': return "\xc4\xa6"; + case 'I': return "\xd0\x87"; + case 'J': return "\xc4\xb5"; + case 'K': return "\xc4\xb6"; + case 'L': return "\xc5\x81"; + case 'M': return "\xe1\xb8\xbe"; + case 'N': return "\xc5\x83"; + case 'O': return "\xce\x98"; + case 'P': return "\xcf\x81"; + case 'Q': return "\x71"; + case 'R': return "\xd0\xaf"; + case 'S': return "\xc8\x98"; + case 'T': return "\xc5\xa6"; + case 'U': return "\xc5\xa8"; + case 'V': return "\xce\xbd"; + case 'W': return "\xe1\xba\x84"; + case 'X': return "\xc3\x97"; + case 'Y': return "\xc2\xa5"; + case 'Z': return "\xc5\xbd"; + default: return NULL; + } +} + +/** + * Converts characters so they look like they've been localized. + * + * Note: This leaves escape sequences untouched so they can later be + * processed by ResTable::collectString in the normal way. + */ +string +pseudolocalize_string(const string& source) +{ + const char* s = source.c_str(); + string result; + const size_t I = source.length(); + for (size_t i=0; i<I; i++) { + char c = s[i]; + if (c == '\\') { + if (i<I-1) { + result += '\\'; + i++; + c = s[i]; + switch (c) { + case 'u': + // this one takes up 5 chars + result += string(s+i, 5); + i += 4; + break; + case 't': + case 'n': + case '#': + case '@': + case '?': + case '"': + case '\'': + case '\\': + default: + result += c; + break; + } + } else { + result += c; + } + } else { + const char* p = pseudolocalize_char(c); + if (p != NULL) { + result += p; + } else { + result += c; + } + } + } + + //printf("result=\'%s\'\n", result.c_str()); + return result; +} + + diff --git a/tools/aapt/pseudolocalize.h b/tools/aapt/pseudolocalize.h new file mode 100644 index 000000000000..94cb034ac5ea --- /dev/null +++ b/tools/aapt/pseudolocalize.h @@ -0,0 +1,9 @@ +#ifndef HOST_PSEUDOLOCALIZE_H +#define HOST_PSEUDOLOCALIZE_H + +#include <string> + +std::string pseudolocalize_string(const std::string& source); + +#endif // HOST_PSEUDOLOCALIZE_H + |