升級(jí)了Android Studio和Gradle之后幔妨,提示下面的警告:
WARNING: API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
To determine what is calling variant.getJavaCompile(), use -Pandroid.debug.obsoleteApi=true on the command line to display a stack trace.
Affected Modules: asyncokhttp
之前gradle插件中蝙昙,為了打包javadoc
,需要把工程中所有的classpath都找出來(lái)韧献,因此調(diào)用了variant.javaCompile
,這是報(bào)錯(cuò)的原因。
如何解決
根據(jù)提示,我們只要把variant.javaCompile
=>variant.javaCompileProvider
就好了檬姥。
但是 variant.javaCompile.destinationDir
這種換了之后會(huì)報(bào)錯(cuò)碎节,因?yàn)?code>javaCompileProvider()中沒(méi)有destinationDir
這個(gè)方法捧搞;
經(jīng)過(guò)查證,我們我們只可以這么做:
variant.javaCompile.destinationDir
=> it.destinationDir
variant.javaCompile.classpath.files
=> it.classpath.files
替換玩之后就不會(huì)報(bào)錯(cuò)了:
不報(bào)警告了狮荔,但是打包javadoc的時(shí)候胎撇,提示各種類找不到
it.classpath.files
是能獲取到所有calsspath的,這沒(méi)問(wèn)題殖氏,問(wèn)題出現(xiàn)在調(diào)用時(shí)序上晚树,因此我們修改一下代碼就好了:
task javadoc(type: Javadoc) {
options.encoding = "utf-8"
source = android.sourceSets.main.java.srcDirs
classpath += files(android.bootClasspath)
options {
//links "http://docs.oracle.com/javase/7/docs/api/"
linksOffline "https://developer.android.com/reference","${android.sdkDirectory}/docs/reference"
encoding = "UTF-8"
}
exclude '**/BuildConfig.java'
exclude '**/R.java'
android.libraryVariants.all { variant ->
variant.javaCompileProvider.configure{
javadoc.classpath += files(it.classpath.files)
}
}
}
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
這是完整的可用代碼:
https://github.com/andforce/release-android-lib-to-jcenter/blob/master/android-tasks.gradle