Merge "Fix clang warnings in core/jni."
diff --git a/cmds/idmap/scan.cpp b/cmds/idmap/scan.cpp
index 4f19a74..7b25f73 100644
--- a/cmds/idmap/scan.cpp
+++ b/cmds/idmap/scan.cpp
@@ -73,7 +73,7 @@
size_t len;
String16 key(parser.getAttributeName(i, &len));
if (key == String16("targetPackage")) {
- const uint16_t *p = parser.getAttributeStringValue(i, &len);
+ const char16_t *p = parser.getAttributeStringValue(i, &len);
if (p != NULL) {
target = String16(p, len);
}
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 3ada9bb..21a9904 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -689,6 +689,20 @@
}
/**
+ * Tries to establish a connection to the zygote that handles a given {@code abi}. Might block and retry if the
+ * zygote is unresponsive. This method is a no-op if a connection is already open.
+ *
+ * @hide
+ */
+ public static void establishZygoteConnectionForAbi(String abi) {
+ try {
+ openZygoteSocketIfNeeded(abi);
+ } catch (ZygoteStartFailedEx ex) {
+ throw new RuntimeException("Unable to connect to zygote for abi: " + abi, ex);
+ }
+ }
+
+ /**
* Tries to open socket to Zygote process if not already open. If
* already open, does nothing. May block and retry.
*/
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index 59057e6..7626310 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -474,10 +474,12 @@
jobject weak_this, jint cameraId, jint halVersion, jstring clientPackageName)
{
// Convert jstring to String16
- const char16_t *rawClientName = env->GetStringChars(clientPackageName, NULL);
+ const char16_t *rawClientName = reinterpret_cast<const char16_t*>(
+ env->GetStringChars(clientPackageName, NULL));
jsize rawClientNameLen = env->GetStringLength(clientPackageName);
String16 clientName(rawClientName, rawClientNameLen);
- env->ReleaseStringChars(clientPackageName, rawClientName);
+ env->ReleaseStringChars(clientPackageName,
+ reinterpret_cast<const jchar*>(rawClientName));
sp<Camera> camera;
if (halVersion == CAMERA_HAL_API_VERSION_NORMAL_CONNECT) {
@@ -740,7 +742,8 @@
const jchar* str = env->GetStringCritical(params, 0);
String8 params8;
if (params) {
- params8 = String8(str, env->GetStringLength(params));
+ params8 = String8(reinterpret_cast<const char16_t*>(str),
+ env->GetStringLength(params));
env->ReleaseStringCritical(params, str);
}
if (camera->setParameters(params8) != NO_ERROR) {
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index daf0ab3..ff89438 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -255,7 +255,9 @@
const jchar* c_keyValuePairs = env->GetStringCritical(keyValuePairs, 0);
String8 c_keyValuePairs8;
if (keyValuePairs) {
- c_keyValuePairs8 = String8(c_keyValuePairs, env->GetStringLength(keyValuePairs));
+ c_keyValuePairs8 = String8(
+ reinterpret_cast<const char16_t*>(c_keyValuePairs),
+ env->GetStringLength(keyValuePairs));
env->ReleaseStringCritical(keyValuePairs, c_keyValuePairs);
}
int status = check_AudioSystem_Command(AudioSystem::setParameters(c_keyValuePairs8));
@@ -268,7 +270,8 @@
const jchar* c_keys = env->GetStringCritical(keys, 0);
String8 c_keys8;
if (keys) {
- c_keys8 = String8(c_keys, env->GetStringLength(keys));
+ c_keys8 = String8(reinterpret_cast<const char16_t*>(c_keys),
+ env->GetStringLength(keys));
env->ReleaseStringCritical(keys, c_keys);
}
return env->NewStringUTF(AudioSystem::getParameters(c_keys8).string());
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index 92a9eee..db32272 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -896,7 +896,8 @@
const jchar* str = env->GetStringCritical(fileName, 0);
String8 fileName8;
if (str) {
- fileName8 = String8(str, env->GetStringLength(fileName));
+ fileName8 = String8(reinterpret_cast<const char16_t*>(str),
+ env->GetStringLength(fileName));
env->ReleaseStringCritical(fileName, str);
}
diff --git a/core/jni/android_os_Parcel.cpp b/core/jni/android_os_Parcel.cpp
index 896faa6..16f7d12 100644
--- a/core/jni/android_os_Parcel.cpp
+++ b/core/jni/android_os_Parcel.cpp
@@ -277,7 +277,9 @@
if (val) {
const jchar* str = env->GetStringCritical(val, 0);
if (str) {
- err = parcel->writeString16(str, env->GetStringLength(val));
+ err = parcel->writeString16(
+ reinterpret_cast<const char16_t*>(str),
+ env->GetStringLength(val));
env->ReleaseStringCritical(val, str);
}
} else {
@@ -411,7 +413,7 @@
size_t len;
const char16_t* str = parcel->readString16Inplace(&len);
if (str) {
- return env->NewString(str, len);
+ return env->NewString(reinterpret_cast<const jchar*>(str), len);
}
return NULL;
}
@@ -453,7 +455,8 @@
jniThrowException(env, "java/lang/IllegalStateException", NULL);
return NULL;
}
- String8 name8(str, env->GetStringLength(name));
+ String8 name8(reinterpret_cast<const char16_t*>(str),
+ env->GetStringLength(name));
env->ReleaseStringCritical(name, str);
int flags=0;
switch (mode&0x30000000) {
@@ -648,7 +651,9 @@
// the caller expects to be invoking
const jchar* str = env->GetStringCritical(name, 0);
if (str != NULL) {
- parcel->writeInterfaceToken(String16(str, env->GetStringLength(name)));
+ parcel->writeInterfaceToken(String16(
+ reinterpret_cast<const char16_t*>(str),
+ env->GetStringLength(name)));
env->ReleaseStringCritical(name, str);
}
}
@@ -663,7 +668,8 @@
IPCThreadState* threadState = IPCThreadState::self();
const int32_t oldPolicy = threadState->getStrictModePolicy();
const bool isValid = parcel->enforceInterface(
- String16(str, env->GetStringLength(name)),
+ String16(reinterpret_cast<const char16_t*>(str),
+ env->GetStringLength(name)),
threadState);
env->ReleaseStringCritical(name, str);
if (isValid) {
diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp
index aaceb4b..744eefd 100644
--- a/core/jni/android_util_AssetManager.cpp
+++ b/core/jni/android_util_AssetManager.cpp
@@ -651,23 +651,29 @@
return 0;
}
- const char16_t* defType16 = defType
- ? env->GetStringChars(defType, NULL) : NULL;
+ const char16_t* defType16 = reinterpret_cast<const char16_t*>(defType)
+ ? reinterpret_cast<const char16_t*>(env->GetStringChars(defType, NULL))
+ : NULL;
jsize defTypeLen = defType
? env->GetStringLength(defType) : 0;
- const char16_t* defPackage16 = defPackage
- ? env->GetStringChars(defPackage, NULL) : NULL;
+ const char16_t* defPackage16 = reinterpret_cast<const char16_t*>(defPackage)
+ ? reinterpret_cast<const char16_t*>(env->GetStringChars(defPackage,
+ NULL))
+ : NULL;
jsize defPackageLen = defPackage
? env->GetStringLength(defPackage) : 0;
jint ident = am->getResources().identifierForName(
- name16.get(), name16.size(), defType16, defTypeLen, defPackage16, defPackageLen);
+ reinterpret_cast<const char16_t*>(name16.get()), name16.size(),
+ defType16, defTypeLen, defPackage16, defPackageLen);
if (defPackage16) {
- env->ReleaseStringChars(defPackage, defPackage16);
+ env->ReleaseStringChars(defPackage,
+ reinterpret_cast<const jchar*>(defPackage16));
}
if (defType16) {
- env->ReleaseStringChars(defType, defType16);
+ env->ReleaseStringChars(defType,
+ reinterpret_cast<const jchar*>(defType16));
}
return ident;
@@ -927,8 +933,11 @@
const size_t N = res.getBasePackageCount();
for (size_t i = 0; i < N; i++) {
const String16 name = res.getBasePackageName(i);
- env->CallVoidMethod(sparseArray, gSparseArrayOffsets.put, (jint) res.getBasePackageId(i),
- env->NewString(name, name.size()));
+ env->CallVoidMethod(
+ sparseArray, gSparseArrayOffsets.put,
+ static_cast<jint>(res.getBasePackageId(i)),
+ env->NewString(reinterpret_cast<const jchar*>(name.string()),
+ name.size()));
}
return sparseArray;
}
@@ -1851,7 +1860,8 @@
str = env->NewStringUTF(str8);
} else {
const char16_t* str16 = pool->stringAt(value.data, &strLen);
- str = env->NewString(str16, strLen);
+ str = env->NewString(reinterpret_cast<const jchar*>(str16),
+ strLen);
}
// If one of our NewString{UTF} calls failed due to memory, an
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp
index d6fb639..0752c7e 100644
--- a/core/jni/android_util_Binder.cpp
+++ b/core/jni/android_util_Binder.cpp
@@ -934,7 +934,8 @@
IBinder* target = (IBinder*) env->GetLongField(obj, gBinderProxyOffsets.mObject);
if (target != NULL) {
const String16& desc = target->getInterfaceDescriptor();
- return env->NewString(desc.string(), desc.size());
+ return env->NewString(reinterpret_cast<const jchar*>(desc.string()),
+ desc.size());
}
jniThrowException(env, "java/lang/RuntimeException",
"No binder found for object");
diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp
index 41fa681..1d70909 100644
--- a/core/jni/android_util_Process.cpp
+++ b/core/jni/android_util_Process.cpp
@@ -109,7 +109,8 @@
const jchar* str16 = env->GetStringCritical(name, 0);
String8 name8;
if (str16) {
- name8 = String8(str16, env->GetStringLength(name));
+ name8 = String8(reinterpret_cast<const char16_t*>(str16),
+ env->GetStringLength(name));
env->ReleaseStringCritical(name, str16);
}
@@ -140,7 +141,8 @@
const jchar* str16 = env->GetStringCritical(name, 0);
String8 name8;
if (str16) {
- name8 = String8(str16, env->GetStringLength(name));
+ name8 = String8(reinterpret_cast<const char16_t*>(str16),
+ env->GetStringLength(name));
env->ReleaseStringCritical(name, str16);
}
@@ -385,7 +387,8 @@
const jchar* str = env->GetStringCritical(name, 0);
String8 name8;
if (str) {
- name8 = String8(str, env->GetStringLength(name));
+ name8 = String8(reinterpret_cast<const char16_t*>(str),
+ env->GetStringLength(name));
env->ReleaseStringCritical(name, str);
}
diff --git a/core/jni/android_util_XmlBlock.cpp b/core/jni/android_util_XmlBlock.cpp
index 2cccb83..57afc2b 100644
--- a/core/jni/android_util_XmlBlock.cpp
+++ b/core/jni/android_util_XmlBlock.cpp
@@ -267,19 +267,20 @@
const char16_t* ns16 = NULL;
jsize nsLen = 0;
if (ns) {
- ns16 = env->GetStringChars(ns, NULL);
+ ns16 = reinterpret_cast<const char16_t*>(env->GetStringChars(ns, NULL));
nsLen = env->GetStringLength(ns);
}
- const char16_t* name16 = env->GetStringChars(name, NULL);
+ const char16_t* name16 = reinterpret_cast<const char16_t*>(
+ env->GetStringChars(name, NULL));
jsize nameLen = env->GetStringLength(name);
jint idx = static_cast<jint>(st->indexOfAttribute(ns16, nsLen, name16, nameLen));
if (ns) {
- env->ReleaseStringChars(ns, ns16);
+ env->ReleaseStringChars(ns, reinterpret_cast<const jchar*>(ns16));
}
- env->ReleaseStringChars(name, name16);
+ env->ReleaseStringChars(name, reinterpret_cast<const jchar*>(name16));
return idx;
}
diff --git a/core/jni/android_view_KeyCharacterMap.cpp b/core/jni/android_view_KeyCharacterMap.cpp
index 4eed5a7..7653f58 100644
--- a/core/jni/android_view_KeyCharacterMap.cpp
+++ b/core/jni/android_view_KeyCharacterMap.cpp
@@ -150,7 +150,9 @@
return 0;
}
- char16_t result = map->getMap()->getMatch(keyCode, chars, size_t(numChars), metaState);
+ char16_t result = map->getMap()->getMatch(
+ keyCode, reinterpret_cast<char16_t*>(chars), size_t(numChars),
+ metaState);
env->ReleasePrimitiveArrayCritical(charsArray, chars, JNI_ABORT);
return result;
@@ -178,7 +180,9 @@
Vector<KeyEvent> events;
jobjectArray result = NULL;
- if (map->getMap()->getEvents(map->getDeviceId(), chars, size_t(numChars), events)) {
+ if (map->getMap()->getEvents(map->getDeviceId(),
+ reinterpret_cast<char16_t*>(chars),
+ size_t(numChars), events)) {
result = env->NewObjectArray(jsize(events.size()), gKeyEventClassInfo.clazz, NULL);
if (result) {
for (size_t i = 0; i < events.size(); i++) {
diff --git a/docs/html/guide/topics/resources/string-resource.jd b/docs/html/guide/topics/resources/string-resource.jd
index e2326ec..cbfa82e 100644
--- a/docs/html/guide/topics/resources/string-resource.jd
+++ b/docs/html/guide/topics/resources/string-resource.jd
@@ -237,7 +237,8 @@
<p>The selection of which string to use is made solely based on grammatical <i>necessity</i>.
In English, a string for <code>zero</code> will be ignored even if the quantity is 0, because 0
isn't grammatically different from 2, or any other number except 1 ("zero books", "one book",
-"two books", and so on).
+"two books", and so on). Conversely, in Korean <i>only</i> the <code>other</code> string will
+ever be used.
<p>Don't be misled either by the fact that, say, <code>two</code> sounds like it could only apply to
the quantity 2: a language may require that 2, 12, 102 (and so on) are all treated like one
@@ -343,7 +344,14 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="numberOfSongsAvailable">
- <item quantity="one">One song found.</item>
+ <!--
+ As a developer, you should always supply "one" and "other"
+ strings. Your translators will know which strings are actually
+ needed for their language. Always include %d in "one" because
+ translators will need to use %d for languages where "one"
+ doesn't mean 1 (as explained above).
+ -->
+ <item quantity="one">%d song found.</item>
<item quantity="other">%d songs found.</item>
</plurals>
</resources>
@@ -353,7 +361,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="numberOfSongsAvailable">
- <item quantity="one">Znaleziono jedną piosenkę.</item>
+ <item quantity="one">Znaleziono %d piosenkę.</item>
<item quantity="few">Znaleziono %d piosenki.</item>
<item quantity="other">Znaleziono %d piosenek.</item>
</plurals>
@@ -597,4 +605,4 @@
// and bold the entire sequence.
CharSequence text = bold(italic(res.getString(R.string.hello)),
color(Color.RED, res.getString(R.string.world)));
-</pre>
\ No newline at end of file
+</pre>
diff --git a/libs/hwui/TextDropShadowCache.cpp b/libs/hwui/TextDropShadowCache.cpp
index 4eec462..96c09e6 100644
--- a/libs/hwui/TextDropShadowCache.cpp
+++ b/libs/hwui/TextDropShadowCache.cpp
@@ -40,7 +40,8 @@
hash = JenkinsHashMix(hash, android::hash_type(italicStyle));
hash = JenkinsHashMix(hash, android::hash_type(scaleX));
if (text) {
- hash = JenkinsHashMixShorts(hash, text, charCount);
+ hash = JenkinsHashMixShorts(
+ hash, reinterpret_cast<const uint16_t*>(text), charCount);
}
if (positions) {
for (uint32_t i = 0; i < charCount * 2; i++) {
diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp
index 5646740..902da4f 100644
--- a/media/jni/android_media_MediaRecorder.cpp
+++ b/media/jni/android_media_MediaRecorder.cpp
@@ -461,11 +461,13 @@
sp<JNIMediaRecorderListener> listener = new JNIMediaRecorderListener(env, thiz, weak_this);
mr->setListener(listener);
- // Convert client name jstring to String16
- const char16_t *rawClientName = env->GetStringChars(packageName, NULL);
+ // Convert client name jstring to String16
+ const char16_t *rawClientName = reinterpret_cast<const char16_t*>(
+ env->GetStringChars(packageName, NULL));
jsize rawClientNameLen = env->GetStringLength(packageName);
String16 clientName(rawClientName, rawClientNameLen);
- env->ReleaseStringChars(packageName, rawClientName);
+ env->ReleaseStringChars(packageName,
+ reinterpret_cast<const jchar*>(rawClientName));
// pass client package name for permissions tracking
mr->setClientName(clientName);
diff --git a/media/jni/android_mtp_MtpDatabase.cpp b/media/jni/android_mtp_MtpDatabase.cpp
index 1a0675e..5d1a018 100644
--- a/media/jni/android_mtp_MtpDatabase.cpp
+++ b/media/jni/android_mtp_MtpDatabase.cpp
@@ -814,7 +814,7 @@
info.mAssociationType = MTP_ASSOCIATION_TYPE_UNDEFINED;
jchar* str = env->GetCharArrayElements(mStringBuffer, 0);
- MtpString temp(str);
+ MtpString temp(reinterpret_cast<char16_t*>(str));
info.mName = strdup((const char *)temp);
env->ReleaseCharArrayElements(mStringBuffer, str, 0);
@@ -883,7 +883,8 @@
}
jchar* str = env->GetCharArrayElements(mStringBuffer, 0);
- outFilePath.setTo(str, strlen16(str));
+ outFilePath.setTo(reinterpret_cast<char16_t*>(str),
+ strlen16(reinterpret_cast<char16_t*>(str)));
env->ReleaseCharArrayElements(mStringBuffer, str, 0);
jlong* longValues = env->GetLongArrayElements(mLongBuffer, 0);
diff --git a/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp b/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp
index ca78bd4..2727338 100644
--- a/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp
+++ b/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp
@@ -48,7 +48,8 @@
String16 jstringToString16(JNIEnv* env, jstring jstr) {
const jchar* str = env->GetStringCritical(jstr, 0);
- String16 str16(str, env->GetStringLength(jstr));
+ String16 str16(reinterpret_cast<const char16_t*>(str),
+ env->GetStringLength(jstr));
env->ReleaseStringCritical(jstr, str);
return str16;
}
@@ -57,7 +58,7 @@
const char16_t* str = string.string();
size_t len = string.size();
- return env->NewString(str, len);
+ return env->NewString(reinterpret_cast<const jchar*>(str), len);
}
static jboolean com_android_pacprocessor_PacNative_createV8ParserNativeLocked(JNIEnv* /* env */,
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 8dfb321..9185ada 100755
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -81,6 +81,7 @@
import com.android.server.Watchdog;
import com.android.server.am.ActivityStack.ActivityState;
import com.android.server.firewall.IntentFirewall;
+import com.android.server.pm.Installer;
import com.android.server.pm.UserManagerService;
import com.android.server.wm.AppTransition;
import com.android.server.wm.WindowManagerService;
@@ -370,6 +371,8 @@
/** All system services */
SystemServiceManager mSystemServiceManager;
+ private Installer mInstaller;
+
/** Run all ActivityStacks through this */
ActivityStackSupervisor mStackSupervisor;
@@ -2358,6 +2361,10 @@
mSystemServiceManager = mgr;
}
+ public void setInstaller(Installer installer) {
+ mInstaller = installer;
+ }
+
private void start() {
Process.removeAllProcessGroups();
mProcessCpuThread.start();
@@ -6326,6 +6333,18 @@
mCallFinishBooting = false;
}
+ ArraySet<String> completedIsas = new ArraySet<String>();
+ for (String abi : Build.SUPPORTED_ABIS) {
+ Process.establishZygoteConnectionForAbi(abi);
+ final String instructionSet = VMRuntime.getInstructionSet(abi);
+ if (!completedIsas.contains(instructionSet)) {
+ if (mInstaller.markBootComplete(VMRuntime.getInstructionSet(abi)) != 0) {
+ Slog.e(TAG, "Unable to mark boot complete for abi: " + abi);
+ }
+ completedIsas.add(instructionSet);
+ }
+ }
+
// Register receivers to handle package update events
mPackageMonitor.register(mContext, Looper.getMainLooper(), UserHandle.ALL, false);
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java
index ca11862..31c604f 100644
--- a/services/core/java/com/android/server/pm/Installer.java
+++ b/services/core/java/com/android/server/pm/Installer.java
@@ -216,6 +216,18 @@
return mInstaller.execute(builder.toString());
}
+ public int markBootComplete(String instructionSet) {
+ if (!isValidInstructionSet(instructionSet)) {
+ Slog.e(TAG, "Invalid instruction set: " + instructionSet);
+ return -1;
+ }
+
+ StringBuilder builder = new StringBuilder("markbootcomplete");
+ builder.append(' ');
+ builder.append(instructionSet);
+ return mInstaller.execute(builder.toString());
+ }
+
public boolean ping() {
if (mInstaller.execute("ping") < 0) {
return false;
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 92ad1ad..8a64aa6 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -147,7 +147,6 @@
private SystemServiceManager mSystemServiceManager;
// TODO: remove all of these references by improving dependency resolution and boot phases
- private Installer mInstaller;
private PowerManagerService mPowerManagerService;
private ActivityManagerService mActivityManagerService;
private DisplayManagerService mDisplayManagerService;
@@ -309,12 +308,13 @@
// Wait for installd to finish starting up so that it has a chance to
// create critical directories such as /data/user with the appropriate
// permissions. We need this to complete before we initialize other services.
- mInstaller = mSystemServiceManager.startService(Installer.class);
+ Installer installer = mSystemServiceManager.startService(Installer.class);
// Activity manager runs the show.
mActivityManagerService = mSystemServiceManager.startService(
ActivityManagerService.Lifecycle.class).getService();
mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
+ mActivityManagerService.setInstaller(installer);
// Power manager needs to be started early because other services need it.
// Native daemons may be watching for it to be registered so it must be ready
@@ -345,7 +345,7 @@
// Start the package manager.
Slog.i(TAG, "Package Manager");
- mPackageManagerService = PackageManagerService.main(mSystemContext, mInstaller,
+ mPackageManagerService = PackageManagerService.main(mSystemContext, installer,
mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore);
mFirstBoot = mPackageManagerService.isFirstBoot();
mPackageManager = mSystemContext.getPackageManager();
diff --git a/tools/aapt/AaptXml.cpp b/tools/aapt/AaptXml.cpp
index 708e405..b04a55d 100644
--- a/tools/aapt/AaptXml.cpp
+++ b/tools/aapt/AaptXml.cpp
@@ -41,7 +41,7 @@
}
size_t len;
- const uint16_t* str = tree.getAttributeStringValue(attrIndex, &len);
+ const char16_t* str = tree.getAttributeStringValue(attrIndex, &len);
return str ? String8(str, len) : String8();
}
@@ -103,7 +103,7 @@
if (tree.getAttributeValue(idx, &value) != NO_ERROR) {
if (value.dataType == Res_value::TYPE_STRING) {
size_t len;
- const uint16_t* str = tree.getAttributeStringValue(idx, &len);
+ const char16_t* str = tree.getAttributeStringValue(idx, &len);
return str ? String8(str, len) : String8();
}
resTable.resolveReference(&value, 0);