在热修复SDK稳健接入文档中,按照步骤进行配置,编译项目时报错,com.android.tools.r8.internal.YI0: Different stack heights at jump target: 1 != 2,查询各个平台均未找到解决方法。
app下的build.gradle配置如下:
apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'
apply plugin: "com.blankj.bus"
apply plugin: 'com.aliyun.ams.emas-services'
apply plugin: 'com.guardsquare.proguard'
android {
compileSdkVersion 31
defaultConfig {
applicationId "com.runtu.driver" //JPush 上注册的包名.
minSdkVersion 21
targetSdkVersion 31
versionCode 8
versionName "1.0.7"
ndk {
//选择要添加的对应cpu类型的.so库.
abiFilters 'arm64-v8a', 'x86_64'
moduleName "app"
}
manifestPlaceholders = [
JPUSH_PKGNAME: applicationId,
JPUSH_APPKEY : "", //JPush 上注册的包名对应的 Appkey.
JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
]
multiDexEnabled true
}
buildTypes {
release {
// multiDexEnabled true
// 关闭 R8.
minifyEnabled false
shrinkResources false
applicationVariants.all { variant ->
variant.outputs.all {
def fileName = "runtudriver${defaultConfig.versionName}${releaseTime()}.apk"
outputFileName = fileName
}
}
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
signingConfigs{
debug{
storeFile file("../.jks")
storePassword ""
keyAlias ""
keyPassword ""
}
}
}
repositories {
maven {
url "https://maven.aliyun.com/nexus/content/repositories/releases"
}
}
proguard {
configurations {
release {
defaultConfiguration 'proguard-android.txt'
configuration 'proguard-rules.pro'
}
debug {
defaultConfiguration 'proguard-android-debug.txt'
configuration 'proguard-rules.pro'
}
}
}
项目级下的build.gradle配置如下:
buildscript {
repositories {
google()
jcenter()
mavenCentral()
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://developer.huawei.com/repo/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/releases/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:7.1.2'
classpath 'com.guardsquare:proguard-gradle:7.1.+'
classpath 'com.huawei.agconnect:agcp:1.6.0.300'
classpath 'com.blankj:bus-gradle-plugin:2.6'
classpath 'com.aliyun.ams:emas-services:1.0.4'
// 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' }
mavenCentral()
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://developer.huawei.com/repo/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/releases/' }
flatDir {
dirs 'libs'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
根据您提供的信息,这个问题可能是由于ProGuard规则导致的。您可以尝试以下方法解决这个问题:
buildTypes {
release {
minifyEnabled true
shrinkResources false
applicationVariants.all { variant ->
variant.outputs.all {
def fileName = "runtudriver${defaultConfig.versionName}${releaseTime()}.apk"
outputFileName = fileName
}
}
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
-keepattributes *Annotation*,Signature,SourceFile,LineNumberTable
-dontoptimize
-dontobfuscate
这些规则将保留注解、签名、源文件和行号表,并禁用优化和混淆。这可能有助于解决您遇到的问题。
根据您提供的信息,报错“Different stack heights at jump target”通常与混淆工具(如R8或Proguard)处理字节码时遇到的问题有关。这个问题可能是由于混淆规则不正确或者某些库在混淆后产生了不兼容的字节码。针对这个特定问题,您可以尝试以下解决方案:
配置Proguard/R8规则:
确保为所有使用的第三方库配置了正确的混淆规则,以避免混淆过程中出现问题。例如,对于JPush、AGC等库,它们可能提供了自己的混淆规则文件,需要在您的proguard-rules.pro
中添加相应的规则。
禁用混淆:
如果您在集成热修复SDK或其他特定功能时遇到混淆相关的问题,可以暂时关闭混淆进行测试,看看是否能编译通过。
release {
minifyEnabled false
}
更新依赖版本:
检查项目中的所有依赖库版本是否与当前Android Gradle插件(7.1.2)和Android SDK版本兼容。有时,过时的库可能会导致此类编译错误。
排查特定库冲突:
逐个移除或替换项目中的第三方库,观察是否还存在此问题,以此来定位可能引发问题的具体库。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。