标签: android-r8

D8和R8 android之间的区别

随着android studio推出了两款新工具D8和R8.根据谷歌文档D8是一个dex工具,R8是一个progourd工具,但由于他们的解释两​​者都做了几乎相同的事情如下:

D8是一个将java字节代码转换为dex代码的dexer.

R8是一个java程序缩小和缩小工具,它将java字节代码转换为优化的dex代码.

它似乎都将java字节代码逐字转换为dex代码.那么,实际上他们在转换dex代码时是在内部做什么的?

android dex android-d8 android-r8

10
推荐指数
3
解决办法
8113
查看次数

Google Gson 保留通用签名

Firebase Crashlytics 中出现崩溃,并附有如何解决问题的注释:

致命异常:java.lang.IllegalStateException:必须使用类型参数创建 TypeToken:new TypeToken<...>() {}; 使用代码压缩器(ProGuard、R8...)时,请确保保留通用签名。

我的尖括号 <...> 之间的通用类名为ApiResponse我用jsonschema2pojo创建它。

generics proguard gson android-r8

10
推荐指数
1
解决办法
3979
查看次数

如何仅关闭Android R8中的混淆处理?

我使用Android Studio 3.3 Canary 5,Gradle 4.9,gradle插件3.3.0-alpha05

minifyEnabled true
useProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
Run Code Online (Sandbox Code Playgroud)

不起作用


编辑:

@JakeWharton:“您为此使用ProGuard配置,而不是Gradle DSL。使用-dontshrink禁用收缩,使用-dontobfuscate禁用混淆,以及使用-dontoptimize禁用优化。”

android android-r8

9
推荐指数
2
解决办法
4722
查看次数

如何对 R8 堆栈跟踪进行反混淆?

我有一个应用程序,它崩溃了,就像每个好的应用程序应该的一样!不久前,Android 构建工具开始使用R8而不是Proguard。它有效并加快了我的构建速度,所以我不理会它。然后出现了一个异常堆栈跟踪,我必须对其进行反混淆。我使用了 proguard UI、retrace.bat脚本和命令行,但所谓的反混淆堆栈跟踪仍然看起来很模糊。

查看mapping.txt生成的结果,我在映射中看到了一堆我不记得以前见过的数字(行号?)。我怀疑这些是反混淆器首先失败的原因。

目前有什么方法可以对此类堆栈跟踪进行反混淆处理吗?

也发布为https://issuetracker.google.com/137078989

obfuscation android deobfuscation android-r8

8
推荐指数
1
解决办法
1614
查看次数

带有 DataBinding 和 R8 的 Android 动态特性

我在动态功能模块中使用 DataBinding 有问题。

当我无法生成与我的片段相关的绑定对象时 isMinifyEnabled = true

通常,我尝试使用此代码来执行此操作: val viewDataBinding: FragmentFeature1Binding = DataBindingUtil.inflate(inflater, layoutId, container, false) 但返回的inflate()值始终为 null,没有任何附加消息。我试图FragmentFeature1Binding直接使用膨胀布局,但我得到了相同的结果。

当我将片段移动到app模块中时,一切正常。

我的应用程序build.gradle.kts

android {
    compileSdkVersion(AndroidVersions.compileSdk)
    buildToolsVersion(AndroidVersions.buildTools)

    dataBinding.isEnabled = true

    defaultConfig {
        applicationId = ApplicationConfig.id
        minSdkVersion(AndroidVersions.minSdk)
        targetSdkVersion(AndroidVersions.targetSdk)
        versionCode = ReleaseVersions.versionCode
        versionName = ReleaseVersions.versionName
    }
    buildTypes {
        getByName(BuildTypes.debug) {
            isMinifyEnabled = true
            isShrinkResources = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
            buildConfigField("Long", "API_TIMEOUT_IN_SECONDS", "30l")
        }
    }

    compileOptions {
        targetCompatibility = JavaVersion.VERSION_1_8
        sourceCompatibility = JavaVersion.VERSION_1_8
    }

    dynamicFeatures …
Run Code Online (Sandbox Code Playgroud)

android android-databinding android-r8 dynamic-feature-module

8
推荐指数
1
解决办法
1013
查看次数

为什么默认情况下发布版本中的 minifyEnabled 为 false?

在 build.gradle (app) 文件中,我们默认有这个,

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}
Run Code Online (Sandbox Code Playgroud)

根据https://developer.android.com/studio/build/shrink-code

minifyEnabled true 使代码更安全(使逆向工程变得困难)并缩小我们用于发布应用程序的发布版本的大小。

我知道使用minifyEnabled true会使编译时间更长,但通常调试版本用于开发和测试,无论如何都不会受到影响。

我正在寻找的是,minifyEnabled true在运行时使用会导致哪些缺点(例如性能影响)。我不担心发布版本的构建时间。

Google Play Console 还建议我们启用它,因此我想知道为什么minifyEnabled默认情况下禁用它。

obfuscation android proguard gradle android-r8

8
推荐指数
1
解决办法
2174
查看次数

将带有 proguard 的 Android 项目迁移到 R8,缺少 rt.java 文件,Android Studio 4.2

我将 Android Studio 版本从 4.1 更新到 4.2,但该项目未编译,因为 Proguard 版本非常旧(4.7)并且与 Java 10 不兼容,但是我决定将项目从 proguard 迁移到 R8,但该项目由于此错误而无法编译:

File not found: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/lib/rt.jar

然后我将 R8 设置为 false 并使用 Proguard 将这一行添加到我的 build.gradle 中,以便将我的 Proguard 更新到更高版本:

classpath 'net.sf.proguard:proguard-gradle:6.1.1'

但我仍然遇到了同样的错误,而不是第一个告诉我更新新版本的 Proguard 的错误。

那么我该如何修复 rt.jar 呢?也许一个 AS 版本和另一个 AS 版本之间的某些目录发生了变化?,如果我将 android studio 降级到 4.1 并恢复我所做的所有更改,该项目工作正常,但我想升级 Android Studio。

android jar proguard android-studio android-r8

8
推荐指数
1
解决办法
1522
查看次数

com.android.tools.r8.CompilationFailedException:编译未能完成,位置:Lcom/facebook/login/DefaultAudience$EnumUnboxingLocalUtility;

将 kotlin 版本 ( ext.kotlin_version ) 更新到1.6.10后,出现一些错误:

com.android.tools.r8.internal.E00: Unexpected type in conversion to primitive: OBJECT

Execution failed for task ':app:minifyReleaseWithR8'.
> com.android.tools.r8.CompilationFailedException: Compilation failed to complete, position: Lcom/facebook/login/DefaultAudience$EnumUnboxingLocalUtility;getNativeProtocolAudience(I)Ljava/lang/String;, origin: ..\.gradle\caches\transforms-3\57102c4e3d32396b86898e5ca0dd620d\transformed\jetified-facebook-core-7.1.0-runtime.jar:com/facebook/login/DefaultAudience.class
Run Code Online (Sandbox Code Playgroud)

如果我在build.gradle (:app)中使用选项minifyEnabled true 和生成签名包,就会发生这种情况。如果我使用旧的ext.kotlin_version(例如 1.5.0),则不会出现此错误。

我认为,如果我在proguard-rules.pro中使用正确的规则,我可以解决这个问题。

android facebook proguard gradle android-r8

8
推荐指数
2
解决办法
3万
查看次数

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

这是我们的R8版本

当前版本是:1.4.94(从 go/r8bot 构建 390954928f0db9c3b888a367f7f128ce3bbfb160 (luci-r8-ci-archive-0-5g74))。

当我从

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
Run Code Online (Sandbox Code Playgroud)

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}
Run Code Online (Sandbox Code Playgroud)

我们收到以下错误。

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
    {
      "code": 403,
      "errors": [
        {
          "domain": "usageLimits",
          "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
          "reason": "dailyLimitExceededUnreg",
          "extendedHelp": "https://code.google.com/apis/console"
        }
      ],
      "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
    }
        at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
        at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:378)
        at com.google.api.client.http.HttpRequest.a(HttpRequest.java:1067)
        at …
Run Code Online (Sandbox Code Playgroud)

android proguard google-drive-api android-r8

7
推荐指数
1
解决办法
926
查看次数

R8 minify 上的问题

我安装了新版本的 Android Studio 并更新了我的项目(不更改依赖项),但遇到了以下问题:

Missing class com.google.protobuf.java_com_google_android_gmscore_sdk_target_granule__proguard_group_gtm_N1281923064GeneratedExtensionRegistryLite$Loader (referenced from: java.util.List kotlinx.coroutines.internal.FastServiceLoader.load(java.lang.Class, java.lang.ClassLoader))
Missing class org.bouncycastle.jsse.BCSSLParameters (referenced from: void okhttp3.internal.platform.BouncyCastlePlatform.configureTlsExtensions(javax.net.ssl.SSLSocket, java.lang.String, java.util.List) and 1 other context)
Missing class org.bouncycastle.jsse.BCSSLSocket (referenced from: void okhttp3.internal.platform.BouncyCastlePlatform.configureTlsExtensions(javax.net.ssl.SSLSocket, java.lang.String, java.util.List) and 5 other contexts)
Missing class org.bouncycastle.jsse.provider.BouncyCastleJsseProvider (referenced from: void okhttp3.internal.platform.BouncyCastlePlatform.<init>())
Missing class org.conscrypt.Conscrypt$Version (referenced from: boolean okhttp3.internal.platform.ConscryptPlatform$Companion.atLeastVersion(int, int, int))
Missing class org.conscrypt.Conscrypt (referenced from: boolean okhttp3.internal.platform.ConscryptPlatform$Companion.atLeastVersion(int, int, int) and 4 other contexts)
Missing class org.conscrypt.ConscryptHostnameVerifier (referenced from: okhttp3.internal.platform.ConscryptPlatform$DisabledHostnameVerifier)
Missing class org.openjsse.javax.net.ssl.SSLParameters (referenced from: void okhttp3.internal.platform.OpenJSSEPlatform.configureTlsExtensions(javax.net.ssl.SSLSocket, …
Run Code Online (Sandbox Code Playgroud)

android okhttp protobuf-java android-r8 kotlin-coroutines

7
推荐指数
1
解决办法
2454
查看次数