Fixed
Status Update
Comments
ap...@google.com <ap...@google.com> #2
Project: r8
Branch: master
commit ac74ee2f038ccd90e7aa5c836911fc11900037a5
Author: Søren Gjesse <sgjesse@google.com>
Date: Mon Oct 01 09:46:10 2018
Add support for -checkdiscard and -whyareyoukeeping for main dex rules
Bug: 116774422
Change-Id: Ic97a0303c202e414a32f54e7c28f2747faf749a3
M src/main/java/com/android/tools/r8/R8.java
M src/main/java/com/android/tools/r8/shaking/DiscardedChecker.java
A src/test/java/com/android/tools/r8/maindexlist/checkdiscard/MainDexListCheckDiscard.java
A src/test/java/com/android/tools/r8/maindexlist/whyareyoukeeping/MainDexListWhyAreYouKeeping.java
https://r8-review.googlesource.com/27520
Branch: master
commit ac74ee2f038ccd90e7aa5c836911fc11900037a5
Author: Søren Gjesse <sgjesse@google.com>
Date: Mon Oct 01 09:46:10 2018
Add support for -checkdiscard and -whyareyoukeeping for main dex rules
Bug: 116774422
Change-Id: Ic97a0303c202e414a32f54e7c28f2747faf749a3
M src/main/java/com/android/tools/r8/R8.java
M src/main/java/com/android/tools/r8/shaking/DiscardedChecker.java
A src/test/java/com/android/tools/r8/maindexlist/checkdiscard/MainDexListCheckDiscard.java
A src/test/java/com/android/tools/r8/maindexlist/whyareyoukeeping/MainDexListWhyAreYouKeeping.java
sg...@google.com <sg...@google.com>
sm...@google.com <sm...@google.com> #3
Hey Søren, I was trying to use this today, and wasn't able to get it to error out.
My command looks like this:
java -jar ../../third_party/r8/lib/r8.jar maindex --main-dex-list-output gen/clank/java/monochrome_apk/classes.dex.zip.main_dex_list --lib lib.java/third_party/android_system_sdk/android_system.jar --main-dex-rules ../../build/android/main_dex_classes.flags --main-dex-rules gen/clank/java/monochrome_apk/monochrome_apk.resources.main-dex-proguard.txt --main-dex-rules /tmp/tmpLHIZg4 gen/clank/java/monochrome_apk/monochrome_apk.jar lib.java/third_party/bazel/desugar/Desugar-runtime.jar ... and a bunch more jars
The main dex rules in /tmp/tmpLHIZg4 look like:
-checkdiscard class org.chromium.chrome.browser.ChromeActivity
-checkdiscard class **ChromeActivity
-checkdiscard class **ChromeActivity*
-checkdiscard class *ChromeActivity**
-checkdiscard class **ChromeActivity**
And yet in the output main dex list has the following lines:
org/chromium/chrome/browser/ChromeActivity$1.class
org/chromium/chrome/browser/ChromeActivity$2.class
org/chromium/chrome/browser/ChromeActivity$3.class
org/chromium/chrome/browser/ChromeActivity$4.class
org/chromium/chrome/browser/ChromeActivity$AppMenuHandlerFactory.class
org/chromium/chrome/browser/ChromeActivity.class
org/chromium/chrome/browser/ChromeActivitySessionTracker.class
There is no output. This is at current master. I tried "whyareyoukeeping class org.chromium.chrome.browser.ChromeActivity", and it says:
org.chromium.chrome.browser.ChromeActivity
|- is referenced in keep rule:
| <PROGUARD_COMPATIBILITY_RULE>:Unknown
The other main-dex-rules are ../../build/android/main_dex_classes.flags:
https://cs.chromium.org/chromium/src/build/android/main_dex_classes.flags?rcl=63b7be70f85826cb8082f6fd31f98357898c9bad
And gen/clank/java/monochrome_apk/monochrome_apk.resources.main-dex-proguard.txt:
# Referenced at /tmp/tmp5aGz4J/AndroidManifest.xml:79
-keep class org.chromium.chrome.browser.ChromeBackupAgent { <init>(); }
# Referenced at /tmp/tmp5aGz4J/AndroidManifest.xml:79
-keep class org.chromium.chrome.browser.MonochromeApplication { <init>(); }
My command looks like this:
java -jar ../../third_party/r8/lib/r8.jar maindex --main-dex-list-output gen/clank/java/monochrome_apk/classes.dex.zip.main_dex_list --lib lib.java/third_party/android_system_sdk/android_system.jar --main-dex-rules ../../build/android/main_dex_classes.flags --main-dex-rules gen/clank/java/monochrome_apk/monochrome_apk.resources.main-dex-proguard.txt --main-dex-rules /tmp/tmpLHIZg4 gen/clank/java/monochrome_apk/monochrome_apk.jar lib.java/third_party/bazel/desugar/Desugar-runtime.jar ... and a bunch more jars
The main dex rules in /tmp/tmpLHIZg4 look like:
-checkdiscard class org.chromium.chrome.browser.ChromeActivity
-checkdiscard class **ChromeActivity
-checkdiscard class **ChromeActivity*
-checkdiscard class *ChromeActivity**
-checkdiscard class **ChromeActivity**
And yet in the output main dex list has the following lines:
org/chromium/chrome/browser/ChromeActivity$1.class
org/chromium/chrome/browser/ChromeActivity$2.class
org/chromium/chrome/browser/ChromeActivity$3.class
org/chromium/chrome/browser/ChromeActivity$4.class
org/chromium/chrome/browser/ChromeActivity$AppMenuHandlerFactory.class
org/chromium/chrome/browser/ChromeActivity.class
org/chromium/chrome/browser/ChromeActivitySessionTracker.class
There is no output. This is at current master. I tried "whyareyoukeeping class org.chromium.chrome.browser.ChromeActivity", and it says:
org.chromium.chrome.browser.ChromeActivity
|- is referenced in keep rule:
| <PROGUARD_COMPATIBILITY_RULE>:Unknown
The other main-dex-rules are ../../build/android/main_dex_classes.flags:
And gen/clank/java/monochrome_apk/monochrome_apk.resources.main-dex-proguard.txt:
# Referenced at /tmp/tmp5aGz4J/AndroidManifest.xml:79
-keep class org.chromium.chrome.browser.ChromeBackupAgent { <init>(); }
# Referenced at /tmp/tmp5aGz4J/AndroidManifest.xml:79
-keep class org.chromium.chrome.browser.MonochromeApplication { <init>(); }
sg...@google.com <sg...@google.com> #4
In this case R8 is generating a synthetic rule for keeping these classes. The naming "PROGUARD_COMPATIBILITY_RULE" is wrong here, as this has nothing to do with Proguard compatibility. We have wrongly named all synthetic rules like this. I will look at giving better name/info here, so we know more precisely why this goes to the main dex. Then we can figure out if we are over approximating main dex in this case.
sm...@google.com <sm...@google.com> #5
As I see it there are 2 distinct issues here:
1) PROGUARD_COMPATIBILITY_RULE and the synthetic rules as Søren mentioned. Perhaps another bug could be filed for this.
2) -checkdiscard did not actually do anything. This is why it is on this bug.
1) PROGUARD_COMPATIBILITY_RULE and the synthetic rules as Søren mentioned. Perhaps another bug could be filed for this.
2) -checkdiscard did not actually do anything. This is why it is on this bug.
sg...@google.com <sg...@google.com> #6
Thanks for clarifying Sam. The problem here is that the standalone maindex generator, the one you hit when using 'java -jar r8.jar maindex', does not have -checkdiscarded handling. When the full R8 pipeling is used that should not be the case.
ap...@google.com <ap...@google.com> #7
Project: r8
Branch: master
commit 8ba9a3189e1d1f786b2383f72734e08b0eb63971
Author: Søren Gjesse <sgjesse@google.com>
Date: Fri Jan 11 14:50:04 2019
Add handling of -checkdiscard in the stand alone main dex list generator
Bug: 116774422
Change-Id: Ic268f295c9d90557f4862890ea547797ddfa2b37
M src/main/java/com/android/tools/r8/GenerateMainDexList.java
M src/test/java/com/android/tools/r8/maindexlist/checkdiscard/MainDexListCheckDiscard.java
https://r8-review.googlesource.com/32887
Branch: master
commit 8ba9a3189e1d1f786b2383f72734e08b0eb63971
Author: Søren Gjesse <sgjesse@google.com>
Date: Fri Jan 11 14:50:04 2019
Add handling of -checkdiscard in the stand alone main dex list generator
Bug: 116774422
Change-Id: Ic268f295c9d90557f4862890ea547797ddfa2b37
M src/main/java/com/android/tools/r8/GenerateMainDexList.java
M src/test/java/com/android/tools/r8/maindexlist/checkdiscard/MainDexListCheckDiscard.java
ap...@google.com <ap...@google.com> #8
Project: r8
Branch: master
commit 66f721042ebc317f089b6f308c576e72cc59ff8f
Author: Søren Gjesse <sgjesse@google.com>
Date: Thu Jan 17 09:47:30 2019
Update tests of -checkdiscard in the standalone main dex list generator
This adds testing of the MainDexListGenerator through the testing
infrastructure.
Bug: 116774422
Change-Id: I3fc18de0c42ac15e2bd62f3a359cae3af0d9a877
M src/main/java/com/android/tools/r8/GenerateMainDexList.java
A src/test/java/com/android/tools/r8/GenerateMainDexListResult.java
A src/test/java/com/android/tools/r8/GenerateMainDexListRunResult.java
A src/test/java/com/android/tools/r8/GenerateMainDexListTestBuilder.java
M src/test/java/com/android/tools/r8/TestBase.java
A src/test/java/com/android/tools/r8/TestBaseBuilder.java
A src/test/java/com/android/tools/r8/TestBaseResult.java
M src/test/java/com/android/tools/r8/TestCompileResult.java
M src/test/java/com/android/tools/r8/TestCompilerBuilder.java
M src/test/java/com/android/tools/r8/maindexlist/checkdiscard/MainDexListCheckDiscard.java
https://r8-review.googlesource.com/33061
Branch: master
commit 66f721042ebc317f089b6f308c576e72cc59ff8f
Author: Søren Gjesse <sgjesse@google.com>
Date: Thu Jan 17 09:47:30 2019
Update tests of -checkdiscard in the standalone main dex list generator
This adds testing of the MainDexListGenerator through the testing
infrastructure.
Bug: 116774422
Change-Id: I3fc18de0c42ac15e2bd62f3a359cae3af0d9a877
M src/main/java/com/android/tools/r8/GenerateMainDexList.java
A src/test/java/com/android/tools/r8/GenerateMainDexListResult.java
A src/test/java/com/android/tools/r8/GenerateMainDexListRunResult.java
A src/test/java/com/android/tools/r8/GenerateMainDexListTestBuilder.java
M src/test/java/com/android/tools/r8/TestBase.java
A src/test/java/com/android/tools/r8/TestBaseBuilder.java
A src/test/java/com/android/tools/r8/TestBaseResult.java
M src/test/java/com/android/tools/r8/TestCompileResult.java
M src/test/java/com/android/tools/r8/TestCompilerBuilder.java
M src/test/java/com/android/tools/r8/maindexlist/checkdiscard/MainDexListCheckDiscard.java
ap...@google.com <ap...@google.com> #9
Project: r8
Branch: d8-1.4
commit 182510fa8dd597ab4cd489db9d8ef99fb8ce3338
Author: Søren Gjesse <sgjesse@google.com>
Date: Fri Jan 18 09:46:48 2019
Version 1.4.26
Cherry-pick: Don't try to look for a class named "null" when the type name is null
CL:https://r8-review.googlesource.com/c/r8/+/33025/
Cherry-pick: Update testing framework
CL:https://r8-review.googlesource.com/c/r8/+/33027/
Cherry-pick: Improve configuration parser error
CL:https://r8-review.googlesource.com/c/r8/+/33030/
Cherry-pick: Add handling of -checkdiscard in the stand alone main dex list generator
CL:https://r8-review.googlesource.com/c/r8/+/32887/
Cherry-pick: Update tests of -checkdiscard in the standalone main dex list generator
CL:https://r8-review.googlesource.com/c/r8/+/33061/
Bug: 116774422
Bug: 122823789
Change-Id: I556173d07fbf43ed28b6345b504752f8249f6c78
M src/main/java/com/android/tools/r8/GenerateMainDexList.java
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/graph/JarCode.java
M src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
M src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
A src/test/java/com/android/tools/r8/GenerateMainDexListResult.java
A src/test/java/com/android/tools/r8/GenerateMainDexListRunResult.java
A src/test/java/com/android/tools/r8/GenerateMainDexListTestBuilder.java
M src/test/java/com/android/tools/r8/TestBase.java
A src/test/java/com/android/tools/r8/TestBaseBuilder.java
A src/test/java/com/android/tools/r8/TestBaseResult.java
M src/test/java/com/android/tools/r8/TestBuilder.java
M src/test/java/com/android/tools/r8/TestCompileResult.java
M src/test/java/com/android/tools/r8/TestCompilerBuilder.java
M src/test/java/com/android/tools/r8/TestDiagnosticMessages.java
M src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
M src/test/java/com/android/tools/r8/ToolHelper.java
M src/test/java/com/android/tools/r8/maindexlist/checkdiscard/MainDexListCheckDiscard.java
M src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
https://r8-review.googlesource.com/33122
Branch: d8-1.4
commit 182510fa8dd597ab4cd489db9d8ef99fb8ce3338
Author: Søren Gjesse <sgjesse@google.com>
Date: Fri Jan 18 09:46:48 2019
Version 1.4.26
Cherry-pick: Don't try to look for a class named "null" when the type name is null
CL:
Cherry-pick: Update testing framework
CL:
Cherry-pick: Improve configuration parser error
CL:
Cherry-pick: Add handling of -checkdiscard in the stand alone main dex list generator
CL:
Cherry-pick: Update tests of -checkdiscard in the standalone main dex list generator
CL:
Bug: 116774422
Bug: 122823789
Change-Id: I556173d07fbf43ed28b6345b504752f8249f6c78
M src/main/java/com/android/tools/r8/GenerateMainDexList.java
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/graph/JarCode.java
M src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
M src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
A src/test/java/com/android/tools/r8/GenerateMainDexListResult.java
A src/test/java/com/android/tools/r8/GenerateMainDexListRunResult.java
A src/test/java/com/android/tools/r8/GenerateMainDexListTestBuilder.java
M src/test/java/com/android/tools/r8/TestBase.java
A src/test/java/com/android/tools/r8/TestBaseBuilder.java
A src/test/java/com/android/tools/r8/TestBaseResult.java
M src/test/java/com/android/tools/r8/TestBuilder.java
M src/test/java/com/android/tools/r8/TestCompileResult.java
M src/test/java/com/android/tools/r8/TestCompilerBuilder.java
M src/test/java/com/android/tools/r8/TestDiagnosticMessages.java
M src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
M src/test/java/com/android/tools/r8/ToolHelper.java
M src/test/java/com/android/tools/r8/maindexlist/checkdiscard/MainDexListCheckDiscard.java
M src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
Description
Some users have requested -checkdiscard options in main-dex rules to take effect.