使用Proguard和R8差异的Android应用

时间:2018-07-02 21:27:36

标签: java android android-studio android-proguard

在我的Android应用中,我正在使用Google R8(目前为实验版本)和Proguard 6.0.3 ...根据您的经验,您的想法如何?主要区别是什么? 与R8相比,有了Proguard,我的应用程序变得更小,并且处理速度确实更好。与R8相比,使用Proguard时的类数更少。

R8与现有的Proguard规则兼容,但它忽略了一些类似的内容:

Ignoring option: -optimizationpasses"
Ignoring option: -assumenoexternalreturnvalues"
Ignoring option: -assumenoexternalsideeffects"

对于缺少的类也给出警告,而不是错误:

AGPBI: {"kind":"warning","text":"Missing class: sun.net.www.protocol.http.HttpURLConnection","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: com.sun.net.httpserver.HttpHandler","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: org.dbunit.dataset.datatype.DefaultDataTypeFactory","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: com.inmobi.ads.InMobiNative$NativeAdListener","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: javax.enterprise.util.AnnotationLiteral","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: sun.net.www.protocol.http.Handler","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: com.flurry.android.ads.FlurryAdNativeListener","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: sun.net.spi.nameservice.NameServiceDescriptor","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: java.lang.ClassValue","sources":[{}],"tool":"D8"}

因此,总的来说,我认为R8Proguard更好,无论它仍然是实验版本。

谷歌说:

  

R8是Proguard的替代品,可用于整个程序的精简和   优化。

我认为这是真的。

但是此工具如何详细工作?是什么让彼此之间的主要区别以及R8的工作原理有何不同?

  

更新:

更新到Android Studio 3.3 Canary 2后,使用R8时,似乎APK的大小与使用Proguard没什么区别

p.s:对不起我的英语:) :):)

  

更新(2019年3月14日):

目前V. 1.4.71的最新R8版本看起来确实不错,比Proguard更快,并且在比较从R8生成的Apk /捆绑包时,尺寸较小。同样,DEX方法的数量也更少。 我在生产中使用了R8 Shrinker,一切似乎都非常有希望。真的很棒。

  

更新(08-APRIL-2019):

目前V. 1.4.79的最新R8版本看起来确实不错,比Proguard更快,并且在比较从R8生成的Apk /捆绑包时,尺寸较小。同样,DEX方法的数量也更少。 我在生产中使用了R8 Shrinker,一切似乎都非常有希望。真的很棒。

0 个答案:

没有答案