AAPT2: Variety of small fixes to get the build working
- Add option to rename package in AndroidManifest.xml
- Support default versionName and versionCode
- Accept True and False as valid booleans
Change-Id: I400e350b9dcd0fd1c197d1929144299c7823617d
diff --git a/tools/aapt2/compile/Compile.cpp b/tools/aapt2/compile/Compile.cpp
index c78670f..689ace6 100644
--- a/tools/aapt2/compile/Compile.cpp
+++ b/tools/aapt2/compile/Compile.cpp
@@ -117,7 +117,11 @@
if (!data.configStr.empty()) {
name << "-" << data.configStr;
}
- name << "_" << data.name << "." << data.extension << ".flat";
+ name << "_" << data.name;
+ if (!data.extension.empty()) {
+ name << "." << data.extension;
+ }
+ name << ".flat";
return name.str();
}
@@ -386,16 +390,26 @@
fileExportWriter.getChunkHeader()->size =
util::hostToDevice32(buffer.size() + f.value().getDataLength());
- if (writer->writeEntry(buffer)) {
- if (writer->writeEntry(f.value().getDataPtr(), f.value().getDataLength())) {
- if (writer->finishEntry()) {
- return true;
- }
+ if (!writer->writeEntry(buffer)) {
+ context->getDiagnostics()->error(DiagMessage(outputPath) << "failed to write");
+ return false;
+ }
+
+ // Only write if we have something to write. This is because mmap fails with length of 0,
+ // but we still want to compile the file to get the resource ID.
+ if (f.value().getDataPtr() && f.value().getDataLength() > 0) {
+ if (!writer->writeEntry(f.value().getDataPtr(), f.value().getDataLength())) {
+ context->getDiagnostics()->error(DiagMessage(outputPath) << "failed to write");
+ return false;
}
}
- context->getDiagnostics()->error(DiagMessage(outputPath) << "failed to write");
- return false;
+ if (!writer->finishEntry()) {
+ context->getDiagnostics()->error(DiagMessage(outputPath) << "failed to write");
+ return false;
+ }
+
+ return true;
}
class CompileContext : public IAaptContext {