开发者社区 问答 正文

请问应用研发平台EMAS安卓热修复SDK接入时,当AGP>7时,关闭R8是必须的吗?

请问应用研发平台EMAS安卓热修复SDK接入时,当AGP>7时,关闭R8是必须的吗?

展开
收起
真的很搞笑 2024-03-13 07:59:04 52 分享 版权
阿里云 AI 助理回答

在应用研发平台EMAS安卓热修复SDK接入时,当Android Gradle Plugin(AGP)版本大于7.0时,关闭R8是必须的。这是因为R8可能会导致生成补丁异常,影响热修复功能的正常运行。

以下是具体操作步骤和原因说明:

1. 关闭R8的原因

R8是AGP 7.0及以上版本默认启用的代码压缩和混淆工具。然而,在使用EMAS热修复SDK时,如果启用了R8,可能会导致以下问题: - 补丁生成过程中出现异常。 - 混淆规则不一致,导致补丁加载失败或运行时崩溃。

因此,为确保热修复功能的稳定性,建议关闭R8并改用ProGuard进行代码混淆。


2. 关闭R8的具体配置

根据知识库中的指导,关闭R8需要进行以下配置:

(1)在项目根目录的build.gradle中添加ProGuard插件依赖

buildscript {
    repositories {
        google() // For the Android Gradle plugin.
        mavenCentral() // For the ProGuard Gradle Plugin.
    }
    dependencies {
        classpath("com.android.tools.build:gradle:x.y.z") // The Android Gradle plugin.
        classpath("com.guardsquare:proguard-gradle:7.1.+") // The ProGuard Gradle plugin.
    }
}

(2)在app目录的build.gradle中应用ProGuard插件

apply plugin: 'com.guardsquare.proguard'

(3)关闭R8混淆

app/build.gradle中,将minifyEnabled设置为false以关闭R8:

android {
    buildTypes {
        release {
            minifyEnabled false // 关闭 R8.
        }
    }
}

(4)配置ProGuard混淆规则

app/build.gradle中添加ProGuard混淆配置:

proguard {
    configurations {
        release {
            defaultConfiguration 'proguard-android.txt'
            configuration 'proguard-rules.pro'
        }
        debug {
            defaultConfiguration 'proguard-android-debug.txt'
            configuration 'proguard-rules.pro'
        }
    }
}

3. 重要提醒

  • 混淆规则一致性:在开启混淆时,生成修复包时必须使用旧包的mapping.txt文件,以保证混淆结果一致,避免因类名或方法名不一致导致补丁加载失败。
  • 安全性:关闭R8后,建议对补丁进行全面测试,确保热修复功能的稳定性和安全性。

综上所述,当AGP版本大于7.0时,关闭R8是必须的操作,并且需要按照上述步骤正确配置ProGuard以确保热修复功能的正常运行。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答