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