集成kotlin协程后,apk无法安装


#1

安装报错 INSTALL_FAILED_DEXOPT
gradle-5.4.1
com.android.tools.build:gradle:3.5.1
kotlin_version = ‘1.3.50’

已确定是kotlin协程的原因
implementation ‘org.jetbrains.kotlinx:kotlinx-coroutines-android:version’
在vivo android5.0.2上
kotlinx-coroutines-version install
1.3.2 fail
1.3.1 fail
1.3.0 fail
1.3.0-rc2 fail
1.3.0-rc fail
1.3.0-M2 fail
1.3.0-M1 success
1.2.2 fail
1.2.1 fail
1.2.0 fail
1.2.0-alpha success
1.2.0-alpha-2 success
1.1.1 success
1.1.0 success

在小米9和红米Note4X上,1.3.2版本正常安装


#2

看这问题描述不是kotlin的原因。卸载了重装下


#3

apk都安装失败,何来卸载一说


#4

把你以前安装的卸载掉的意思。看原因比较像是以前的版本有opt出来不兼容的dex,导致失败,所以想让你把集成以前的版本卸掉,这种在自己实现了dexclassloader处理动态加载比较常见。

kotlin编译完就是java字节码,实在不应该影响到dexopt这一步,估计有比较有意思的事儿发生~


#5

唯一可能想到的,就是协程库引进来以后你的方法数达到阈值,导致低版本设备dexopt失败,所以你的apk用了multidex了没?

以及,你可以尝试去掉协程,引一下guava或者其他体积比较大的库试试,估计一样会有这个问题。


#6
dependencies = [
        easypermissions                     : "pub.devrel:easypermissions:+",
        autosize                            : "me.jessyan:autosize:+",
        multidex                            : "androidx.multidex:multidex:+",
        okhttp                              : "com.squareup.okhttp3:okhttp:+",
        okio                                : "com.squareup.okio:okio:+",
        qmui                                : "com.qmuiteam:qmui:+",
        lifecycle                           : 'androidx.lifecycle:lifecycle-extensions:2.0.0',
        support_v7                          : "androidx.appcompat:appcompat:${googleSupportVersion}",
        support_v4                          : "androidx.legacy:legacy-support-v4:${googleSupportVersion}",
        vector_drawable                     : "androidx.vectordrawable:vectordrawable:${googleSupportVersion}",
        design                              : "com.google.android.material:material:${googleSupportVersion}",
        recyclerview                        : "androidx.recyclerview:recyclerview:${googleSupportVersion}",
        glide                               : "com.github.bumptech.glide:glide:+",
        annotations                         : "androidx.annotation:annotation:${googleSupportVersion}",
        exifinterface                       : "androidx.exifinterface:exifinterface:${googleSupportVersion}",
        toastutils                          : "com.hjq:toast:+",
        gif                                 : "pl.droidsonroids.gif:android-gif-drawable:+",
        fitAndroid                          : "com.github.steven2947:FitAndroid8:+",
        rxjava                              : "io.reactivex.rxjava2:rxjava:+",
        rxAndroid                           : "io.reactivex.rxjava2:rxandroid:+",
        rxBidding                           : "com.jakewharton.rxbinding2:rxbinding:+",
        viewpager_indicator                 : "com.shizhefei:ViewPagerIndicator:+",
        groupedrecyclerviewadapter          : "com.github.donkingliang:GroupedRecyclerViewAdapter:+",
        bindingcollectionadapter            : "me.tatarka.bindingcollectionadapter2:bindingcollectionadapter:+",
        bindingcollectionadapterRecyclerview: "me.tatarka.bindingcollectionadapter2:bindingcollectionadapter-recyclerview:+",
        tencentBugly                        : "com.tencent.bugly:crashreport:latest.release",
        tencentTbs                          : "com.tencent.tbs.tbssdk:sdk:43697",
]

#7

我用android studio 新建了一个空项目,Activity中一行代码也没写,就在gradle加了个这个
implementation ‘org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2’
然后,安装失败。。。
注释掉就ok了
难道是 协程包太大?方法数超了?
找了个线上的项目,如上回复,集成了各种包,然后implementation 一下1.3.2的协程, 安装失败。。。
注释掉,又好了,换了个版本1.3.2->1.3.0-M1,也可以了

对了,手机我恢复出厂设置了,依然这样


#8

有人遇到过这个问题,但不知道咋解决的


#9

看来是协程库里面有特定的写法,触发了vivo这个系统里面dexopt的算法实现的bug了。。。。<(_ _)>


#10

看了下issue,估计是谷歌的bug了。。。惨。。。

不过他提到d8,比较新的版本默认启用了,你禁用了他试试呢?

android.enableD8=false

#11

enableR8=false和true都试过了
不管这个的事
改了个版本号,不是好了吗,enableR8=true也可以


#12

https://issuetracker.google.com/issues/140656855
看样子是了,惨,kotlin协程是不是不能集成到项目里了


#13

他这个跟我遇到的一模一样,复现也是,建个空项目api一下就复现了,我在想,1.3.2在vivo不行,换了个版本好了,那那个可以的版本,是不是在红米又不行了


#14

这就尴尬了


#15

竟然还有和机型相关的问题…


京ICP备16022265号-2 Kotlin China 2017 - 2018