一、背景
在H5plus项目中,主要使用Cordova技术栈。在Cordova-Android项目中,默认的插件安装方式是在Terminal中执行以下指令:
cd <cordova项目名称>
cordova plugin add <cordova插件名称>
如果需要加载自定义插件,需要先把插件代码拷贝到项目目录中,通过执行cordova plugin add <插件名称>
把插件加载到项目当中。整个过程需要手动操作,比较繁琐,而且不符合插件远程依赖的要求,存在优化空间。而在安卓工程中,通常使用gradle这一工具来进行三方依赖库的下载和上传。如何将gradle与cordova插件安装结合在一起,优化插件安装流程,成为了一个重要的课题。
二、相关技术介绍
-
Gradle
Gradle属于任务驱动型构建工具,它的构建过程是基于Task的。同时Gradle也是基于DSL(领域特定语言)语法的自动化构建工具。
以下是Gradle官方的介绍:
- Gradle支持已有的Maven仓库和Ivy仓库。现阶段安卓开发主要依赖Maven仓库。
- Gradle基于Groovy的构建脚本。Gradle是以 Groovy 语言为基础,面向Java应用为主。Gradle构建的逻辑主要位于build.gradle文件中。
-
Cordova插件
先带大家回顾一下Cordova。Cordova的特点可以概括为以下几点:
- 它是一个Hybrid App开发框架
- 本质是 HTML、CSS、JavaScript 外面包装个原生的壳
- 出自于 Adobe 11 年收购的 PhoneGap,是驱动 PhoneGap 的核心引擎
- 是 Apache 的顶级开源项目
三、具体实现方案
上图为改造之后的插件库结构。Android模块为Android壳工程 -> Android Library -> 插件源码的一个嵌套结构。Android壳工程为Android Library提供打包的环境,Android Library主要负责源码的打包和maven的发布。下图为cordova-plugin-mediacapture的项目结构:
//引入插件
plugins {
id 'com.android.library' //library插件,我们以library为整体进行打包
id 'maven-publish' //把jar文件发布到maven仓库的插件,取代过时的android-maven-gradle-plugin开源库
}
//android相关配置
android {
namespace 'org.apache.cordova.mediacapture'
compileSdk 31
defaultConfig {
minSdk 23
targetSdk 31
consumerProguardFiles "consumer-rules.pro"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
//插件依赖项
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'androidx.core:core-ktx:1.6.0'
implementation 'org.apache.cordova:cordovalib:6.0.0-fix.0'
implementation "org.apache.cordova:file:7.0.0-fix.1"
}
def aarVersion = "4.0.0-fix.0"
//maven发布配置
afterEvaluate {
publishing {
publications {
maven(MavenPublication) {
groupId = 'org.apache.cordova'
artifactId = 'mediacapture'
version = aarVersion
def projectName = project.getName()
artifact "build/outputs/aar/${projectName}-release.aar" //得上传通过gradle assemble方法生成的aar,否则无法引用具体文件
}
}
// 添加仓库地址
repositories {
// 本地仓库
// mavenLocal()
// 上传到用nexus repository manager构建的私有maven仓库
maven {
url("https://repo.ekuaibao.com/repository/hose-cordova-plugin/")
credentials {
username = ""
password = ""
}
}
}
}
}
同时在android目录中的settings.gradle中要添加maven地址:
四、Maven发布和远程依赖步骤
-
Maven发布(以cordova-plugin-camera插件为例)
git clone git@git.ekuaibao.com:fe-core/2nd-library/cordova-plugin-camera.git
cd cordova-plugin-camera
cd camera
gradle assemble
更新build.gradle中的aarVersion,不更新版本号无法进行maven发布
gradle publish
-
添加插件远程依赖
- 在app/build.gradle中添加依赖
- 在app/repositories.gradle中添加maven地址
- 在app/src/res/xml/config.xml中添加配置