diff --git a/tools/aapt2/cmd/Dump.cpp b/tools/aapt2/cmd/Dump.cpp index b4311c56428b5..29e471e581ce9 100644 --- a/tools/aapt2/cmd/Dump.cpp +++ b/tools/aapt2/cmd/Dump.cpp @@ -398,6 +398,36 @@ int DumpXmlStringsCommand::Action(const std::vector& args) { return 0; } +int DumpPackageNameCommand::Action(const std::vector& args) { + if (args.size() < 1) { + diag_->Error(DiagMessage() << "No dump apk specified."); + return 1; + } + + auto loaded_apk = LoadedApk::LoadApkFromPath(args[0], diag_); + if (!loaded_apk) { + return 1; + } + + io::FileOutputStream fout(STDOUT_FILENO, kStdOutBufferSize); + Printer printer(&fout); + + xml::Element* manifest_el = loaded_apk->GetManifest()->root.get(); + if (!manifest_el) { + diag_->Error(DiagMessage() << "No AndroidManifest."); + return 1; + } + + xml::Attribute* attr = manifest_el->FindAttribute({}, "package"); + if (!attr) { + diag_->Error(DiagMessage() << "No package name."); + return 1; + } + printer.Println(StringPrintf("%s", attr->value.c_str())); + + return 0; +} + /** Preform no action because a subcommand is required. */ int DumpCommand::Action(const std::vector& args) { if (args.size() == 0) { diff --git a/tools/aapt2/cmd/Dump.h b/tools/aapt2/cmd/Dump.h index 03a4fba133ba7..0724d6203e8ff 100644 --- a/tools/aapt2/cmd/Dump.h +++ b/tools/aapt2/cmd/Dump.h @@ -115,12 +115,26 @@ class DumpXmlTreeCommand : public Command { std::vector files_; }; -/** The default dump command. Preforms no action because a subcommand is required. */ +/** Prints the contents of the resource table from the APK. */ +class DumpPackageNameCommand : public Command { + public: + explicit DumpPackageNameCommand(IDiagnostics* diag) : Command("packagename"), diag_(diag) { + SetDescription("Print the package name of the APK."); + } + + int Action(const std::vector& args) override; + + private: + IDiagnostics* diag_; +}; + +/** The default dump command. Performs no action because a subcommand is required. */ class DumpCommand : public Command { public: explicit DumpCommand(IDiagnostics* diag) : Command("dump", "d"), diag_(diag) { AddOptionalSubcommand(util::make_unique(diag_)); AddOptionalSubcommand(util::make_unique(diag_)); + AddOptionalSubcommand(util::make_unique(diag_)); AddOptionalSubcommand(util::make_unique(diag_)); AddOptionalSubcommand(util::make_unique(diag_)); AddOptionalSubcommand(util::make_unique(diag_));