如何使用最新的 R8 Shrinker 版本

Posted

技术标签:

【中文标题】如何使用最新的 R8 Shrinker 版本【英文标题】:How to use latest R8 Shrinker version 【发布时间】:2019-07-30 15:34:45 【问题描述】:

由于一个错误,我使用了 R8 Shrinker 的本地 jar 文件(按照 R8 团队的建议),并将类路径添加到顶部 gradle.build

classpath files($..../R8.jar/$)

现在,无论对 android Studio 进行任何更新,Gradle 构建仍然使用旧版本的 R8,我之前使用过 V. 1.4.55

最近我看到他们发布了最新版本:V. 1.4.69 https://r8.googlesource.com/r8/

所以我的问题是:如何配置 gradle 以告知使用最新版本的 R8,因为我没有看到任何关于此的文档

【问题讨论】:

【参考方案1】:

您应该添加以下内容:

buildscript 
    repositories 
        maven 
            url 'http://storage.googleapis.com/r8-releases/raw'
        
    
    dependencies 
        classpath 'com.android.tools:r8:1.4.71'  //Must be before the Gradle Plugin for Android. - Or any other version
        classpath 'com.android.tools.build:gradle:...'
     

【讨论】:

你可以从这里找到 r8 版本r8.googlesource.com/r8/+refs 这曾经对我有用,对于我突然从 R8 开始遇到的大量崩溃来说,这确实是一个很好的解决方法。不幸的是,该 Maven 存储库中似乎不再提供二进制文件...【参考方案2】:

目前没有办法引用 R8 的最新版本。使用特定版本的 R8 只能用于解决错误,当该修复到达 Android Gradle 插件时,应删除对特定版本 R8 的引用,以便仅使用 Android Gradle 插件中内置的 R8。

这是为了限制使用特定的 R8 版本,避免开发者停留在旧版本上,并鼓励开发者使用捆绑了 Android Gradle 插件的版本。这限制了开发人员使用的不同版本的数量。

【讨论】:

【参考方案3】:

截至 2020 年 7 月,您可以执行以下操作:

将此添加到您的 build.gradle 文件中(用于项目,而不是应用)

 dependencies 
        classpath 'com.android.tools:r8:2.0.88'  // Must be before the Gradle Plugin for Android.
       // in addition to everything else that was here ....
    

整个文件应该是这样的,供参考:

    // Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript 
    repositories 
        google()
        jcenter()
    
    dependencies 
        classpath 'com.android.tools:r8:2.0.88'  // Must be before the Gradle Plugin for Android.
        classpath 'com.android.tools.build:gradle:4.0.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    


allprojects 
    repositories 
        google()
        jcenter()
        maven  url "https://jitpack.io" 
    


task clean(type: Delete) 
    delete rootProject.buildDir

【讨论】:

以上是关于如何使用最新的 R8 Shrinker 版本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用新的 Android 2.0 Shrinker 并将 useProguard 设置为 false?

如何让 R8 + proguard-android-optimize.txt + Google Drive API 无缝运行?

如何使应用程序与 2 个不同版本的 DLL 一起工作

如何在没有隐式锁定最新的64位Intel CPU的情况下用寄存器交换堆栈顶部?

如何修复因 ProGuard/R8 导致的崩溃?

如何使 ADB 无线在 Android 11 中工作?