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

Commit d8cf27cb authored by Jean-Luc Coelho's avatar Jean-Luc Coelho Committed by Android (Google) Code Review
Browse files

Merge "Add "no-proguard-location-reference" flag to aapt2"

parents 051e3397 181cbfde
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1297,7 +1297,8 @@ class Linker {
      return false;
    }

    proguard::WriteKeepSet(keep_set, &fout, options_.generate_minimal_proguard_rules);
    proguard::WriteKeepSet(keep_set, &fout, options_.generate_minimal_proguard_rules,
                           options_.no_proguard_location_reference);
    fout.Flush();

    if (fout.HadError()) {
+4 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ struct LinkOptions {
  bool generate_conditional_proguard_rules = false;
  bool generate_minimal_proguard_rules = false;
  bool generate_non_final_ids = false;
  bool no_proguard_location_reference = false;
  std::vector<std::string> javadoc_annotations;
  Maybe<std::string> private_symbols;

@@ -215,6 +216,9 @@ class LinkCommand : public Command {
        "Generates R.java without the final modifier. This is implied when\n"
            "--static-lib is specified.",
        &options_.generate_non_final_ids);
    AddOptionalSwitch("--no-proguard-location-reference",
        "Keep proguard rules files from having a reference to the source file",
        &options_.no_proguard_location_reference);
    AddOptionalFlag("--stable-ids", "File containing a list of name to ID mapping.",
        &stable_id_file_path_);
    AddOptionalFlag("--emit-ids",
+18 −8
Original line number Diff line number Diff line
@@ -393,12 +393,16 @@ bool CollectProguardRules(IAaptContext* context_, xml::XmlResource* res, KeepSet
  return true;
}

void WriteKeepSet(const KeepSet& keep_set, OutputStream* out, bool minimal_keep) {
void WriteKeepSet(const KeepSet& keep_set, OutputStream* out, bool minimal_keep,
                  bool no_location_reference) {

  Printer printer(out);
  for (const auto& entry : keep_set.manifest_class_set_) {
    if (!no_location_reference) {
      for (const UsageLocation& location : entry.second) {
        printer.Print("# Referenced at ").Println(location.source.to_string());
      }
    }
    printer.Print("-keep class ").Print(entry.first).Println(" { <init>(); }");
  }

@@ -414,7 +418,9 @@ void WriteKeepSet(const KeepSet& keep_set, OutputStream* out, bool minimal_keep)

    if (can_be_conditional) {
      for (const UsageLocation& location : locations) {
        if (!no_location_reference) {
          printer.Print("# Referenced at ").Println(location.source.to_string());
        }
        printer.Print("-if class **.R$layout { int ")
            .Print(JavaClassGenerator::TransformToFieldName(location.name.entry))
            .Println("; }");
@@ -424,9 +430,11 @@ void WriteKeepSet(const KeepSet& keep_set, OutputStream* out, bool minimal_keep)
        printer.Println("); }");
      }
    } else {
      if (!no_location_reference) {
        for (const UsageLocation& location : entry.second) {
          printer.Print("# Referenced at ").Println(location.source.to_string());
        }
      }

      printer.Print("-keep class ").Print(entry.first.name).Print(" { <init>(");
      printer.Print((minimal_keep) ? entry.first.signature : "...");
@@ -436,9 +444,11 @@ void WriteKeepSet(const KeepSet& keep_set, OutputStream* out, bool minimal_keep)
  }

  for (const auto& entry : keep_set.method_set_) {
    if (!no_location_reference) {
      for (const UsageLocation& location : entry.second) {
        printer.Print("# Referenced at ").Println(location.source.to_string());
      }
    }
    printer.Print("-keepclassmembers class * { *** ").Print(entry.first.name)
        .Print("(").Print(entry.first.signature).Println("); }");
    printer.Println();
+4 −2
Original line number Diff line number Diff line
@@ -70,7 +70,8 @@ class KeepSet {
  }

 private:
  friend void WriteKeepSet(const KeepSet& keep_set, io::OutputStream* out, bool minimal_keep);
  friend void WriteKeepSet(const KeepSet& keep_set, io::OutputStream* out, bool minimal_keep,
                           bool no_location_reference);

  friend bool CollectLocations(const UsageLocation& location, const KeepSet& keep_set,
                               std::set<UsageLocation>* locations);
@@ -89,7 +90,8 @@ bool CollectProguardRules(IAaptContext* context, xml::XmlResource* res, KeepSet*

bool CollectResourceReferences(IAaptContext* context, ResourceTable* table, KeepSet* keep_set);

void WriteKeepSet(const KeepSet& keep_set, io::OutputStream* out, bool minimal_keep);
void WriteKeepSet(const KeepSet& keep_set, io::OutputStream* out, bool minimal_keep,
                  bool no_location_reference);

bool CollectLocations(const UsageLocation& location, const KeepSet& keep_set,
                      std::set<UsageLocation>* locations);
+1 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ namespace aapt {
std::string GetKeepSetString(const proguard::KeepSet& set, bool minimal_rules) {
  std::string out;
  StringOutputStream sout(&out);
  proguard::WriteKeepSet(set, &sout, minimal_rules);
  proguard::WriteKeepSet(set, &sout, minimal_rules, false);
  sout.Flush();
  return out;
}