Android app兼容低版本Java环境
原文地址: Android app兼容低版本Java環(huán)境 - Stars-One的雜貨小窩
起因是修復(fù)一個(gè)Bug遇到的問題,找到了一個(gè)可以讓app兼容低版本java的方法
眾所周知,Android版本更新后,其內(nèi)置的JRE環(huán)境也隨之更新了
假如我們?cè)赼pp中用到了JDK8的特有的屬性,而用戶的手機(jī)設(shè)備系統(tǒng)還是比較低,而沒有JRE8環(huán)境,自然運(yùn)行的時(shí)候就會(huì)提示類不存在了
問題說明
項(xiàng)目中使用到的一個(gè)庫(kù)kizitonwose/Calendar: A highly customizable calendar view and compose library for Android.
但是由于其內(nèi)置使用的是Jdk8的對(duì)應(yīng)的日期類,但是低版本的Android并不是jdk8的運(yùn)行環(huán)境,所以會(huì)導(dǎo)致在低版本運(yùn)行出現(xiàn)類未定義的錯(cuò)誤,如下錯(cuò)誤:
Fatal Exception: java.lang.NoClassDefFoundError: Failed resolution of: Ljava/time/temporal/WeekFields;
at com.kizitonwose.calendar.core.ExtensionsKt.firstDayOfWeekFromLocale(Extensions.kt:5)
at com.kizitonwose.calendar.core.ExtensionsKt.daysOfWeek$default(Extensions.kt:5)
實(shí)際上,開源庫(kù)文檔已經(jīng)提供了低版本適配對(duì)應(yīng)說明(但這個(gè)項(xiàng)目之前是組長(zhǎng)寫的,而他是直接將庫(kù)代碼復(fù)制過來(lái)了,沒注意那個(gè)文檔,所以導(dǎo)致后面線上環(huán)境低版本的android設(shè)備報(bào)錯(cuò)了)
解決方法
這里說的問題的解決方法,也是本文提到的兼容低版本的方法
我們需要可以使用google的一個(gè)庫(kù)
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
最新版本可以在此鏈接找到
并在app模塊的gradle文件里配置以下信息即可:
android {
defaultConfig {
// Required ONLY if your minSdkVersion is below 21
multiDexEnabled true
}
compileOptions {
// Enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Set Java compatibility (version can be higher if desired)
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
// Also add this for Kotlin projects (version can be higher if desired)
jvmTarget = "1.8"
}
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:<latest-version>'
}
最后,如果以后我們需要使用到JDK高版本的特性,可以使用上面的方法,讓低版本的Android系統(tǒng)也能使用上高版本JDK特性
總結(jié)
以上是生活随笔為你收集整理的Android app兼容低版本Java环境的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦见抓好大的鱼是什么意思
- 下一篇: Java程序员必备技能:Collecti