1. 程式人生 > >Android Studio module從2.3升級到3.1的詳細過程處理,讓公司專案直接匹配最新studio3模式

Android Studio module從2.3升級到3.1的詳細過程處理,讓公司專案直接匹配最新studio3模式

在這裡不得不吐槽一下google,由於新的Android studio3版本出來了,然後也摒棄了Android2.3版本,導致現在我的Android2.3.3出問題提示下載配件也失效了,還有就是依賴專案的新模式從compile變成了implementation也給我們這些程式猿額外的任務,升級公司的舊專案的版本。  在這裡我就來說說我升級專案版本的經歷過的坑。

新建project工程命名為LinApp:import module然後新增到新專案,因為Android studio 3.1.x版本不自動匯入編譯列表的問題見:

當成功playeroperator成為執行專案時也出現了新的錯誤提醒

紅色的字所表達的意思就是編譯工具版本過於老舊,需要更新工具版本並且同步專案,點選update build tools version and sync project,一個個更新下來,提醒:

這邊所表達的意思就是依賴方式的變化,藍色網址為詳細說明,Android studio3版本以前都是 採用 

1.testCompile方式,而現在這邊提示要修改為testImplementation

2.compile方式,而現在這邊提示要修改為implementation

3.androidTestCompile方式,而現在這邊提示要修改為androidTestImplementation

上述說明了了修正提示,至於修改方式則直接:ctrl+R鍵進行文字替換

1.直接compile的單條資料進行Replace

2直接大寫Compile的單條資料進行Replace,這裡主要針對的是androidTestCompile等的字尾

注意事項:不要使用Replace all因為路徑裡面可能存在compile,要一條一條看著換過去,如下:

最後就編譯成功通過,可以執行專案到手機上。

全部按提示替換依賴字母后

Could not resolve all dependencies for configuration ':playeroperator:debugRuntimeClasspath'.
Could not determine artifacts for com.android.support:support-compat:27.1.1: No cached version available for offline mode

當場斯巴達了,簡直是有沒有搞錯了是吧,表示深深的鄙視有沒有

出現原因往往是依賴library的compile沒有完全轉變或者以下自動生成依賴沒有按最新版本修正

原因就出來compile依賴個人庫沒有處理

---------------當然為了完全符合新版本規範,刪除   

buildToolsVersion '27.0.3'

最後成功執行編譯到手機上:

個人library build.gradle配置更新

apply plugin: 'com.android.library'

android {
    compileSdkVersion 27


    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    //    implementation fileTree(include: ['*.jar'], dir: 'libs')
    //    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
    //        exclude group: 'com.android.support', module: 'support-annotations'
    //    })
    //    implementation 'com.android.support:appcompat-v7:27.1.1'
    //    testImplementation 'junit:junit:4.12'
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.+'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'org.xutils:xutils:3.4.0'
    implementation files('libs/gson-2.2.4.jar')
    //implementation 'com.google.code.gson:gson:2.8.0'//懶得換最新
    implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.4'
    //準備移除
    implementation 'com.bigkoo:convenientbanner:2.0.5'
    // 輪播圖
    implementation 'com.github.bumptech.glide:glide:4.0.0-RC1'
    implementation 'com.android.support:support-v4:27.1.1'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0-RC1'

}

playeroperator build.gradle新舊版本配置

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27

    defaultConfig {
        applicationId "com.playeroperator"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    repositories {//不知用途,給glide順帶的
        mavenCentral() // jcenter() works as well because it pulls from Maven Central
    }
}

dependencies {
    //------依賴方式--Android studio3.1 新的--開始---------------
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation project(':librarypo')
    implementation project(':ffmpeg4android_lib')
    implementation 'com.jakewharton:butterknife:8.5.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
    //-------------------記憶體洩漏檢測工具(開始)---------------------
    debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.1'
    releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
    testImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
    //-------------------記憶體洩漏檢測工具(結束)---------------------
    //------依賴方式--Android studio3.1 新的--結束---------------

    //------依賴方式--Android studio2 以前--開始---------------
//    compile fileTree(include: ['*.jar'], dir: 'libs')
//    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
//        exclude group: 'com.android.support', module: 'support-annotations'
//    })
//    compile 'com.android.support:appcompat-v7:25.3.1'
//    compile 'com.android.support.constraint:constraint-layout:1.0.2'
//    testCompile 'junit:junit:4.12'

//    compile project(':librarypo')
//    compile 'com.jakewharton:butterknife:8.5.1'
//    annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
//    //-------------------記憶體洩漏檢測工具(開始)---------------------
//    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1'
//    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
//    testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
//    //-------------------記憶體洩漏檢測工具(結束)---------------------
    //------依賴方式--Android studio2 以前--結束---------------

}

最後總結:

1.新建工程import module公司專案進工程

2.settings.gradle將工程寫入編譯列表

3.各種點選update build tool,按照Android studio提示來,按照新標準刪除buildToolsVersion 'x.x.x'

4.複製新工程的自動生成依賴包,到library和公司module,替換原本的自動生成依賴包;

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

5.compile,Compile替換舊的build.gradle,然後同步

6.如果出現問題不用擔心,在logcat裡面點選找到對應的漏修改的位置

7.最後執行編譯成功到手機上,我們的專案就直接轉變為Android studio3的格式標準了

注意:

implement(特殊,讓依賴包的一些東西保護起來)

概念 : 將該依賴隱藏在內部,而不對外部公開。

理解 :類似於private私有,這裡是只有本module可以用,就算依賴用不了它依賴或者封裝的東西

舉例 : 此時專案中有一個 mudule 是 ImageLoader ,其內部用 implement 指令依賴了 glide 這個庫, 那麼此時我們在 app mudule 中無法呼叫 glide 庫中的方法.

compile

概念: android studio 3.0 版本後廢棄該指令 改用 api 代替, api 完全等同於之前的 compile 指令, 也就是普通的依賴, 第三方庫在 mudule 中依賴後其他 mudule 都可以使用該庫.

官方推薦在不影響的前提下優先使用 implement 指令依賴.

是不是滿滿的成就感,嘿嘿