Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d067918b authored by Junwei Wang's avatar Junwei Wang Committed by Android (Google) Code Review
Browse files

Merge "Revert "Move some image/9patch code to androidfw"" into main

parents 2f16184f 917043bc
Loading
Loading
Loading
Loading
+1 −12
Original line number Diff line number Diff line
@@ -63,21 +63,15 @@ cc_library {
        "AssetsProvider.cpp",
        "AttributeResolution.cpp",
        "BigBuffer.cpp",
        "BigBufferStream.cpp",
        "ChunkIterator.cpp",
        "ConfigDescription.cpp",
        "FileStream.cpp",
        "Idmap.cpp",
        "LoadedArsc.cpp",
        "Locale.cpp",
        "LocaleData.cpp",
        "misc.cpp",
        "NinePatch.cpp",
        "ObbFile.cpp",
        "PosixUtils.cpp",
        "Png.cpp",
        "PngChunkFilter.cpp",
        "PngCrunch.cpp",
        "ResourceTimer.cpp",
        "ResourceTypes.cpp",
        "ResourceUtils.cpp",
@@ -90,10 +84,7 @@ cc_library {
    ],
    export_include_dirs: ["include"],
    export_shared_lib_headers: ["libz"],
    static_libs: [
        "libincfs-utils",
        "libpng",
    ],
    static_libs: ["libincfs-utils"],
    whole_static_libs: [
        "libandroidfw_pathutils",
        "libincfs-utils",
@@ -207,11 +198,9 @@ cc_test {
        "tests/ConfigDescription_test.cpp",
        "tests/ConfigLocale_test.cpp",
        "tests/DynamicRefTable_test.cpp",
        "tests/FileStream_test.cpp",
        "tests/Idmap_test.cpp",
        "tests/LoadedArsc_test.cpp",
        "tests/Locale_test.cpp",
        "tests/NinePatch_test.cpp",
        "tests/ResourceTimer_test.cpp",
        "tests/ResourceUtils_test.cpp",
        "tests/ResTable_test.cpp",
+6 −0
Original line number Diff line number Diff line
@@ -92,6 +92,10 @@ cc_library_host_static {
    srcs: [
        "compile/IdAssigner.cpp",
        "compile/InlineXmlFormatParser.cpp",
        "compile/NinePatch.cpp",
        "compile/Png.cpp",
        "compile/PngChunkFilter.cpp",
        "compile/PngCrunch.cpp",
        "compile/PseudolocaleGenerator.cpp",
        "compile/Pseudolocalizer.cpp",
        "compile/XmlIdCollector.cpp",
@@ -108,7 +112,9 @@ cc_library_host_static {
        "format/binary/XmlFlattener.cpp",
        "format/proto/ProtoDeserialize.cpp",
        "format/proto/ProtoSerialize.cpp",
        "io/BigBufferStream.cpp",
        "io/File.cpp",
        "io/FileStream.cpp",
        "io/FileSystem.cpp",
        "io/StringStream.cpp",
        "io/Util.cpp",
+7 −7
Original line number Diff line number Diff line
@@ -18,12 +18,12 @@

#include "ResourceValues.h"
#include "ValueVisitor.h"
#include "androidfw/BigBufferStream.h"
#include "format/Archive.h"
#include "format/binary/TableFlattener.h"
#include "format/binary/XmlFlattener.h"
#include "format/proto/ProtoDeserialize.h"
#include "format/proto/ProtoSerialize.h"
#include "io/BigBufferStream.h"
#include "io/Util.h"
#include "xml/XmlDom.h"

@@ -48,7 +48,7 @@ static ApkFormat DetermineApkFormat(io::IFileCollection* apk) {
    }

    // First try in proto format.
    std::unique_ptr<android::InputStream> manifest_in = manifest_file->OpenInputStream();
    std::unique_ptr<io::InputStream> manifest_in = manifest_file->OpenInputStream();
    if (manifest_in != nullptr) {
      pb::XmlNode pb_node;
      io::ProtoInputStreamReader proto_reader(manifest_in.get());
@@ -102,7 +102,7 @@ std::unique_ptr<LoadedApk> LoadedApk::LoadProtoApkFromFileCollection(
  io::IFile* table_file = collection->FindFile(kProtoResourceTablePath);
  if (table_file != nullptr) {
    pb::ResourceTable pb_table;
    std::unique_ptr<android::InputStream> in = table_file->OpenInputStream();
    std::unique_ptr<io::InputStream> in = table_file->OpenInputStream();
    if (in == nullptr) {
      diag->Error(android::DiagMessage(source) << "failed to open " << kProtoResourceTablePath);
      return {};
@@ -129,7 +129,7 @@ std::unique_ptr<LoadedApk> LoadedApk::LoadProtoApkFromFileCollection(
    return {};
  }

  std::unique_ptr<android::InputStream> manifest_in = manifest_file->OpenInputStream();
  std::unique_ptr<io::InputStream> manifest_in = manifest_file->OpenInputStream();
  if (manifest_in == nullptr) {
    diag->Error(android::DiagMessage(source) << "failed to open " << kAndroidManifestPath);
    return {};
@@ -262,7 +262,7 @@ bool LoadedApk::WriteToArchive(IAaptContext* context, ResourceTable* split_table
        return false;
      }

      android::BigBufferInputStream input_stream(&buffer);
      io::BigBufferInputStream input_stream(&buffer);
      if (!io::CopyInputStreamToArchive(context,
                                        &input_stream,
                                        path,
@@ -296,7 +296,7 @@ bool LoadedApk::WriteToArchive(IAaptContext* context, ResourceTable* split_table
      }

      uint32_t compression_flags = file->WasCompressed() ? ArchiveEntry::kCompress : 0u;
      android::BigBufferInputStream manifest_buffer_in(&buffer);
      io::BigBufferInputStream manifest_buffer_in(&buffer);
      if (!io::CopyInputStreamToArchive(context, &manifest_buffer_in, path, compression_flags,
                                        writer)) {
        return false;
@@ -321,7 +321,7 @@ std::unique_ptr<xml::XmlResource> LoadedApk::LoadXml(const std::string& file_pat

  std::unique_ptr<xml::XmlResource> doc;
  if (format_ == ApkFormat::kProto) {
    std::unique_ptr<android::InputStream> in = file->OpenInputStream();
    std::unique_ptr<io::InputStream> in = file->OpenInputStream();
    if (!in) {
      diag->Error(android::DiagMessage() << "failed to open file");
      return nullptr;
+4 −4
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@
#include "Diagnostics.h"
#include "android-base/stringprintf.h"
#include "android-base/utf8.h"
#include "androidfw/FileStream.h"
#include "androidfw/IDiagnostics.h"
#include "androidfw/StringPiece.h"
#include "cmd/ApkInfo.h"
@@ -38,6 +37,7 @@
#include "cmd/Dump.h"
#include "cmd/Link.h"
#include "cmd/Optimize.h"
#include "io/FileStream.h"
#include "trace/TraceBuffer.h"
#include "util/Files.h"
#include "util/Util.h"
@@ -99,7 +99,7 @@ class MainCommand : public Command {
 */
class DaemonCommand : public Command {
 public:
  explicit DaemonCommand(android::FileOutputStream* out, android::IDiagnostics* diagnostics)
  explicit DaemonCommand(io::FileOutputStream* out, android::IDiagnostics* diagnostics)
      : Command("daemon", "m"), out_(out), diagnostics_(diagnostics) {
    SetDescription("Runs aapt in daemon mode. Each subsequent line is a single parameter to the\n"
        "command. The end of an invocation is signaled by providing an empty line.");
@@ -147,7 +147,7 @@ class DaemonCommand : public Command {
  }

 private:
  android::FileOutputStream* out_;
  io::FileOutputStream* out_;
  android::IDiagnostics* diagnostics_;
  std::optional<std::string> trace_folder_;
};
@@ -167,7 +167,7 @@ int MainImpl(int argc, char** argv) {

  // Use a smaller buffer so that there is less latency for printing to stdout.
  constexpr size_t kStdOutBufferSize = 1024u;
  android::FileOutputStream fout(STDOUT_FILENO, kStdOutBufferSize);
  aapt::io::FileOutputStream fout(STDOUT_FILENO, kStdOutBufferSize);
  aapt::text::Printer printer(&fout);

  aapt::StdErrDiagnostics diagnostics;
+16 −19
Original line number Diff line number Diff line
@@ -25,16 +25,13 @@
#include "android-base/errors.h"
#include "android-base/file.h"
#include "android-base/utf8.h"
#include "androidfw/BigBufferStream.h"
#include "androidfw/ConfigDescription.h"
#include "androidfw/FileStream.h"
#include "androidfw/IDiagnostics.h"
#include "androidfw/Image.h"
#include "androidfw/Png.h"
#include "androidfw/StringPiece.h"
#include "cmd/Util.h"
#include "compile/IdAssigner.h"
#include "compile/InlineXmlFormatParser.h"
#include "compile/Png.h"
#include "compile/PseudolocaleGenerator.h"
#include "compile/XmlIdCollector.h"
#include "format/Archive.h"
@@ -42,6 +39,8 @@
#include "format/proto/ProtoSerialize.h"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/io/zero_copy_stream_impl_lite.h"
#include "io/BigBufferStream.h"
#include "io/FileStream.h"
#include "io/FileSystem.h"
#include "io/StringStream.h"
#include "io/Util.h"
@@ -53,9 +52,9 @@
#include "xml/XmlDom.h"
#include "xml/XmlPullParser.h"

using ::aapt::io::FileInputStream;
using ::aapt::text::Printer;
using ::android::ConfigDescription;
using ::android::FileInputStream;
using ::android::StringPiece;
using ::android::base::SystemErrorCodeToString;
using ::google::protobuf::io::CopyingOutputStreamAdaptor;
@@ -242,7 +241,7 @@ static bool CompileTable(IAaptContext* context, const CompileOptions& options,
  }

  if (options.generate_text_symbols_path) {
    android::FileOutputStream fout_text(options.generate_text_symbols_path.value());
    io::FileOutputStream fout_text(options.generate_text_symbols_path.value());

    if (fout_text.HadError()) {
      context->GetDiagnostics()->Error(android::DiagMessage()
@@ -308,7 +307,7 @@ static bool CompileTable(IAaptContext* context, const CompileOptions& options,
}

static bool WriteHeaderAndDataToWriter(StringPiece output_path, const ResourceFile& file,
                                       android::KnownSizeInputStream* in, IArchiveWriter* writer,
                                       io::KnownSizeInputStream* in, IArchiveWriter* writer,
                                       android::IDiagnostics* diag) {
  TRACE_CALL();
  // Start the entry so we can write the header.
@@ -449,7 +448,7 @@ static bool CompileXml(IAaptContext* context, const CompileOptions& options,
  }

  if (options.generate_text_symbols_path) {
    android::FileOutputStream fout_text(options.generate_text_symbols_path.value());
    io::FileOutputStream fout_text(options.generate_text_symbols_path.value());

    if (fout_text.HadError()) {
      context->GetDiagnostics()->Error(android::DiagMessage()
@@ -499,22 +498,21 @@ static bool CompilePng(IAaptContext* context, const CompileOptions& options,
    }

    android::BigBuffer crunched_png_buffer(4096);
    android::BigBufferOutputStream crunched_png_buffer_out(&crunched_png_buffer);
    io::BigBufferOutputStream crunched_png_buffer_out(&crunched_png_buffer);

    // Ensure that we only keep the chunks we care about if we end up
    // using the original PNG instead of the crunched one.
    const StringPiece content(reinterpret_cast<const char*>(data->data()), data->size());
    android::PngChunkFilter png_chunk_filter(content);
    android::SourcePathDiagnostics source_diag(path_data.source, context->GetDiagnostics());
    auto image = android::ReadPng(&png_chunk_filter, &source_diag);
    PngChunkFilter png_chunk_filter(content);
    std::unique_ptr<Image> image = ReadPng(context, path_data.source, &png_chunk_filter);
    if (!image) {
      return false;
    }

    std::unique_ptr<android::NinePatch> nine_patch;
    std::unique_ptr<NinePatch> nine_patch;
    if (path_data.extension == "9.png") {
      std::string err;
      nine_patch = android::NinePatch::Create(image->rows.get(), image->width, image->height, &err);
      nine_patch = NinePatch::Create(image->rows.get(), image->width, image->height, &err);
      if (!nine_patch) {
        context->GetDiagnostics()->Error(android::DiagMessage() << err);
        return false;
@@ -539,8 +537,7 @@ static bool CompilePng(IAaptContext* context, const CompileOptions& options,
    }

    // Write the crunched PNG.
    if (!android::WritePng(image.get(), nine_patch.get(), &crunched_png_buffer_out, {},
                           &source_diag, context->IsVerbose())) {
    if (!WritePng(context, image.get(), nine_patch.get(), &crunched_png_buffer_out, {})) {
      return false;
    }

@@ -560,7 +557,7 @@ static bool CompilePng(IAaptContext* context, const CompileOptions& options,

      png_chunk_filter.Rewind();
      android::BigBuffer filtered_png_buffer(4096);
      android::BigBufferOutputStream filtered_png_buffer_out(&filtered_png_buffer);
      io::BigBufferOutputStream filtered_png_buffer_out(&filtered_png_buffer);
      io::Copy(&filtered_png_buffer_out, &png_chunk_filter);
      buffer.AppendBuffer(std::move(filtered_png_buffer));
    }
@@ -570,7 +567,7 @@ static bool CompilePng(IAaptContext* context, const CompileOptions& options,
      // This will help catch exotic cases where the new code may generate larger PNGs.
      std::stringstream legacy_stream{std::string(content)};
      android::BigBuffer legacy_buffer(4096);
      android::Png png(context->GetDiagnostics());
      Png png(context->GetDiagnostics());
      if (!png.process(path_data.source, &legacy_stream, &legacy_buffer, {})) {
        return false;
      }
@@ -581,7 +578,7 @@ static bool CompilePng(IAaptContext* context, const CompileOptions& options,
    }
  }

  android::BigBufferInputStream buffer_in(&buffer);
  io::BigBufferInputStream buffer_in(&buffer);
  return WriteHeaderAndDataToWriter(output_path, res_file, &buffer_in, writer,
      context->GetDiagnostics());
}
Loading