AndroidStudio 中導入第三方控件源代碼(原創)


對於發布到 github 的第三方控件,可以簡單地在 build.gradle 中添加引用,不過如果要想修改其功能,就需要下載源代碼並導入到自己的工程中了。

下面以 https://github.com/JZXiang/TimePickerDialog 為例,記錄下導入源代碼的過程:

方式一 導入源碼到本地項目中

此方式源代碼中的src與res文件夾都位於控件的文件夾下,不必逐一導入,但是需要修改控件的 build.gradle 文件

一、下載源代碼壓縮包 TimePickerDialog-master.zip 並解壓到本地,文件夾結構如下:

其中 TimePickerDialog 文件夾是控件的源代碼,其中結構如下:

二、修改控件源代碼文件夾(TimePickerDialog 文件夾)下的 build.gradle 文件,因為原作者的編譯環境與我們的不一致,我們要使用自己的編譯環境來編譯控件的源代碼,所以要把 build.gradle 中相關內容替換成本地版本 build.gradle 中的內容,以防出現版本錯誤。

apply plugin: 'com.android.library' // 控件以 library 結尾,App 以 application 結尾

android {
    // 以下內容要換成本地 build.gradel 的內容
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    // 以下三行要換成本地 build.gradel 的內容
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:support-v4:23.3.0'
}
apply from: 'bintray.gradle' // 本地程序編譯時未使用 bintray.gradle,此行可刪掉

在本地新建一個 android 項目,正常運行后,打開 app 文件夾下的 build.gradle,從中提取相關行用來替換控件 build.gradle 中的相應內容:

apply plugin: 'com.android.application'

android {
    // 以下內容為編譯版本,全部復制到控件的 build.gradle 中
    compileSdkVersion 28
    buildToolsVersion "31.0.0"
    defaultConfig {
        applicationId "com.example.appimport" // 此行是 app 獨有的,復制到控件時要刪掉,否則會報“重復的程序ID”
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    // 只復制以下三行就行
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    // 下面三行與調試有關,不必復制
    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'
}

三、導入到現有的工程中

在 AndroidStudio 中選擇菜單 File -> New -> Import module...,選擇 TimePickerDialog 文件夾導入。

四、在工程上添加代碼依賴

在 AndroidStudio 中選擇菜單 File -> Project Structure...

這樣就可以在自己的程序中使用該控件了,也可以對其源代碼進行修改了。

方式二 直接在本地項目中創建包,將控件源代碼加入其中

此方式不涉及 build.gradle 的版本問題,不足之處是如果控件包含 res 文件夾的話,需要逐一解決 R 類的問題

以 TimePickerDialog 為例,其完整的包名為 com.jzxiang.pickerview.TimePickerDialog,在本地項目的 java 文件夾上點右鍵,新建包,包名稱為“com.jzxiang.pickerview”,注意,不包含“TimePickerDialog”,然后將控件“com\jzxiang\pickerview”下的所有文件及子文件夾復制到新建的包文件夾下。如果控件源代碼包含子文件夾,此時不用逐級建立包,復制過來后子包中的類都可以被正確引用。

對於只有 java 代碼的控件,這樣做就可以正確使用了。但是如果控件還包含 xml 資源,就比較麻煩(目前沒找到更合適的方法)。對於資源文件,如果本地項目中不包含同名文件,可以直接將 xml 復制到本地項目的 res 文件夾下,如果控件中的 xml 與本地項目同名,可以將其內容復制追加到本地項目的同名文件中。在編譯運行時,會出現引用 R 類的錯誤,因為在控件的源代碼中是以 import com.jzxiang.pickerview.R 的形式引用的資源,現在我們已經將資源復制到本地項目中,因此直接將 import com.jzxiang.pickerview.R 注釋掉就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM