1. 程式人生 > >Android studio 專案從老版本遷移到新版本遇到的問題,以及解決方案

Android studio 專案從老版本遷移到新版本遇到的問題,以及解決方案

記錄一下我的專案從studio2.0遷移到3.1.2上遇到的問題。希望對你提供幫助。

更新步驟

第一步:更新 gradle
將 gradle 更新到指定的版本,我用的是4.4.(gradle外掛版本也要一併更新,對應表請自行查閱)
這裡寫圖片描述
第二步:
將專案的 compileSdkVersion 以及 buildToolsVersion 以及依賴庫的 ‘com.android.support’ 相關包更新到同一個版本。我的是27.

//編譯
compileSdkVersion 27
buildToolsVersion '27.0.3'
//依賴庫
implementation 'com.android.support:design:27.1.0' implementation 'com.android.support:support-v4:27.1.0' implementation 'com.android.support:recyclerview-v7:27.1.0'

第三部:
將依賴庫引入 compile 全部改為 implementation
改完之後,同步一下工程,當然,我的開始遷移的步驟不是這樣的,這裡只是針對整個修改的過程,主要還是下面的問題以及解決辦法

問題及解決辦法

問題一:Process ‘command ‘E:\Android\Android-Studio-New\sdk\build-tools\27.0.3\aapt.

一般一開始就是這個問題,這個問題主要是依賴包的版本,以及compileSdkVersion、buildToolVersion版本不一致,調成一致後,如果還要問題,可以參考這個部落格,看是否能幫助到你,
我改完後,就出現了問題二。

問題二:AAPT2 error: check logs for details

關於這個問題,我也折騰了很久,網上有各種做法,只是對於我沒有作用,下面是網上的做法在gradle的properties檔案下加一行android.enableAapt2=false
我新增這一行後,有出現了其他的問題,於是我就沒有新增,而是編的具體錯誤。也就是問題三

問題三:類似C:/Users/key_word/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/2b92a2dd09209c4e79a93a8d5cd09cf4/res/values/values.xml error: style attribute ‘@android:attr/windowEnterAnimation’ not found. error: style attribute ‘@android:attr/windowExitAnimation’ not found.

可以看到這個問題是styles資原始檔出的問題。開啟style.xml檔案,找到錯誤中提到的@android:attr/windowEnterAnimation這種類似錯誤,我在新版本中添加了一個來試了下,發現新版本中資源的引用名稱方式變了,沒有了前面的@符號,問題解決辦法就是把所有的資源錯誤的引用全部改掉,重新編譯。到這裡幾乎就可以編譯過了,只是會出現一些程式上的問題。

問題四: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. - butterknife-6.0.0.jar (butterknife-6.0.0.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.

我這裡也是參考感謝這位博主 我用的是第二種方式,不過一定要注意,implementation 和annotationProcessor 都不能少
implementation files('libs/butterknife-6.0.0.jar')
annotationProcessor files('libs/butterknife-6.0.0.jar')

問題五:第三方jar包初始化錯誤,如:universal-image-loader ,XUtils 等

仔細查找了下,有兩種解決辦法
第一:如果你的buid配置檔案中,設定了multiDexEnabled true,那麼自定義的application不能繼承Application了,而是繼承MultiDexApplication
第二種:如果沒有設定multiDexEnabled true 或者設定位false的時候,則需繼承Application

最後,到這裡,幾乎就沒有啥問題了,就是一些新sdk和api的問題,相信google可以幫你解決。下面是我的幾個小問題

  1. 程式包org.apache.http.client.entity不存在 解決辦法:在buildToolVersion 和 defaultConfig 之間加入一行
    useLibrary 'org.apache.http.legacy'
  2. 錯誤: 找不到符號 符號: 方法 sqrt(float) 位置: 類 FloatMath 解決辦法:改為 (float)Math.sqrt()
  3. 錯誤: 找不到符號 符號: 類 KeyEventCompat 位置: 程式包 android.support.v4.view 解決方法:KeyEventCompat 已經被取消了,hasNoModifiers方法已被KeyEvent實現了
if (KeyEventCompat.hasNoModifiers(event)) {
    handled = arrowScroll(FOCUS_FORWARD);
} else if (KeyEventCompat.hasModifiers(event, KeyEvent.META_SHIFT_ON)) {
    handled = arrowScroll(FOCUS_BACKWARD);
}
改成:
if (event.hasNoModifiers()) {
    handled = arrowScroll(FOCUS_FORWARD);
} else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {
    handled = arrowScroll(FOCUS_BACKWARD);
}