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
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
119
tools/aapt/pseudolocalize.cpp
Normal file
119
tools/aapt/pseudolocalize.cpp
Normal file
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
9
tools/aapt/pseudolocalize.h
Normal file
9
tools/aapt/pseudolocalize.h
Normal file
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user