1. 程式人生 > >AndroidStudio升級3.x之後太坑了

AndroidStudio升級3.x之後太坑了

由於手欠升級了As 3.0以上的版本,16年寫的專案在開啟,,徹底崩潰了,浪費了一天時間來整理這些爛攤子。
過程當中遇到的問題主要記錄一下

The specified Android SDK Build Tools version (25.0.1) is ignored, as it is below the minimum supported version (26.0.2) for Android Gradle Plugin 3.0.1.Android SDK Build Tools 26.0.2 will be used.
To suppress this warning, remove “buildToolsVersion ‘25.0.1’” from your build.gradle file, as each version of the Android Gradle Plugin now has a default version of the build tools.
Update Build Tools version and sync project.
Open File.

首先就來這個錯誤,仔細看了一下是因為build.gradle中compileSdkVersion 版本號與buildToolsVersion不匹配。

解決方式 進入build.gradle檔案中把兩個版本號改成一支,,或者留下compileSdkVersion 28 buildToolsVersion刪除;

Error:Execution failed for task ':app:javaPreCompileDebug'.
> Annotation processors must be explicitly declared now.  The following dependencies on the compile classpath are found to contain annotation processor.  Please add them to the annotationProcessor configuration.
    - permissionsdispatcher-processor-2.3.1.jar
  Alternatively, set android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true to continue with previous behavior.  Note that this option is deprecated and will be removed in the future.
  See https://developer.android.com/r/tools/annotation-processor-error-message.html for more details.

這個問題就比較蛋疼了,我只知道註解出了問題,後來問了度娘才知道最新版build.gradle需要新增這句程式碼

 apply plugin: 'com.android.application'

    ....
    androdi{
                defaultConfig{
                ....
                ...
                javaCompileOptions {
                annotationProcessorOptions {
                    includeCompileClasspath true
                }
        }
    }
}

還有一個最主要的問題 就是新版的as 對庫的依賴compile 要用 implementation 或 api 替換   testCompile 要用 testImplementation 或 testApi 替換 androidTestCompile 要用 androidTestImplementation 或 androidTestApi 替換。。。。。一臉懵逼,老專案全部都得換。還是換了,專案編譯,執行其他引進來的module程式碼中都報錯說是找不到這個包找不到哪個包的。。十臉懵逼,咋回事兒,心態要蹦了,明明module所依賴的commonLibrary(module)中這些包都依賴了。。就是找不到,後來查資料看才知道他們之間的區別了

              1.  api是complie的替代品,api 與 complie 沒有區別。

               2.  最新官方推薦 implementation 用來代替 compile, implementation 會使AS編譯速度更快

               3.  implementation宣告的依賴包只限於模組內部使用,不允許其他模組使用。

                api宣告的依賴包時, 模組依賴於此模組,此模組使用api宣告的依賴包是可以被其他模組使用

意思就是在我的Amodule中所依賴的庫想要別的依賴Amodule的Bmodule中使用的話,,Amodule中  complie必須改成api,而不能改成 implementation,如果改成implementation的話就只有自身的module中使用,其他的庫是不能使用的。。知道了這些立馬改成api,,編譯立馬通過!

其他的錯誤很簡單容易解決。。建議在做老專案的童鞋不到萬不得已不要升級了,,太頭疼了,學習路程太漫長了,我才剛剛開始!加油!