Android Studio3.0 Canary推出有一段時間了,今天導入一個工程出現(xiàn)了些問題,使用的gradle配置如下:
compileSdkVersion 24
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.stone.myapplication"
minSdkVersion 21
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
·
·
·
implementation 'com.android.support:appcompat-v7:24.1.0'
implementation 'com.android.support:support-v4:24.1.0'
}
說明一下 AS3.0的buildToolVersion必須在25及以上。
這時是可以run到手機上并運行的,但是發(fā)現(xiàn)代碼好多地方報錯,截兩張圖如下:

編譯報錯1.jpg

編譯報錯2.jpg
這些問題都是找不到父類方法。包括找不到繼承的方法onCreateOptionsMenu(),finish()等。
這就很奇怪了,于是在繼承的父類AppCompatActivity一級級往上找,直到這個地方:

BaseFragmentActivityJB找不到.jpg
BaseFragmentActivityJB類找不到,而上面提到方法都在這個類中。感覺這個是AS3.0在使用低版本compile sdk的bug,或者根本也不推薦使用,畢竟buildTool使用的最低要求25.
把compile sdk和相關(guān)類庫改成26-beta后可以正常,也找到了BaseFragmentActivityApi16不再是原來的BaseFragmentActivityJB。如下:

image.png
試試AS2.x版本的效果
那再AS2.x上使用compile sdk24可以正常呢,看看BaseFragmentActivityJB類的位置。遂新建了個工程特意看一下位置。引入support-v4:24.1.0后:

image.png
發(fā)現(xiàn)有個internal_impl-24.1.0.jar而BaseFragmentActivityJB就在這個jar包中。

image.png
在AS3.0中使用的時候只有class.jar而沒有internal_impl-24.1.0.jar,這就是問題所在了。
over,AS3還是推薦使用25,26的compilesdk和庫吧。