IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android Gradle Plugin插件开发----介绍 -> 正文阅读

[移动开发]Android Gradle Plugin插件开发----介绍

????????以下内容基于本人所学插件内容而编写的,如与网上插件内容不相同,很正常


????????android 插件化开发,这个词我们在网上经常可以看到,同时看到的还有组件化开发。在这里我们只讨论插件化开发的相关内容。

1.插件的作用

?????????以我所学的插件知识,我简单概括下插件的作用,即插件可以用于哪些地方。

1.接入第三方SDK时进行统一配置参数。

????????场景:有多个APP,都接入了友盟推送SDK

? ? ? ? 不使用插件时:如果友盟推送SDK进行了升级,此时需要一个个APP找过去,把他们的?build.gradle、androidManifest.xml、java文件 等等位置的代码进行修改,稍不留神就容易改错,改完以后还要验证配置是否升级成功。以及查找推送配置的时候,要在?build.gradle、androidManifest.xml、java文件 等等位置查找。维护、升级成本高。更新维护不方便,代码耦合度高

? ? ? ? 使用插件:结合组件化功能,在gradle中将所有相关的配置参数都配置好,而不需要在 build.gradle、androidManifest.xml、java文件 这些不同的地方分开配置参数,方便统一管理配置参数、更新维护。

2.接入多个三方SDK时,使用插件统一对不同应用进行混淆配置

? ? ? ? 场景:有多个APP,各接入了多个三方SDK,现在APP需要混淆?

? ? ? ? 不使用插件时:?去SDK对应网址查找混淆配置、其他APP处复制混淆配置,并添加到各个APP的混淆配置中,如果后续这些SDK混淆方式有所更改,需要一个个将这些APP的混淆配置改过来。更新维护不方便。

????????使用插件:可以在打包APK的过程中,将特定的多个三方SDK的混淆配置加入到现有的混淆配置中,统一维护管理,一键添加、移除混淆。

3.使用插件一键切换SDK平台----相同功能SDK,平台不同

????????场景:有很多APP,都接入了友盟统计SDK,如果某一天,需要将所有APP都改为接入百度统计SDK

????????不使用插件时: 需要每次都往应用代码中加入对应平台的统计SDK,注释掉之前使用的统计SDK,移除添加 build.gradle、androidManifest.xml、java文件 等配置、初始化代码,还要检查是否移除更改成功,等等操作。更新维护不方便,代码耦合度高

?? ? ? ?使用插件:现有的 XCSUEvent?统计SDK,在里面接入了百度、友盟统计SDK,未来可以加入更多平台的统计SDK。可以通过gradle的配置,来让APP自由的切换应用百度统计SDK、友盟统计SDK、其他统计SDK,以及对应SDK的 androidManifest.xml、权限、混淆配置。即应用百度统计SDK时,只会加入百度统计SDK相关的配置加入到APP中;应用友盟统计SDK时,只会加入友盟统计SDK相关的配置加入到APP中。

4.使用插件动态更改类包名相关配置

????????场景:多个APP接入微信支付、微信分享SDK时,需要新建文件夹,配置 包名.wxapi.WXPayEntryActivity ?包名.wxapi.WXEntryActivity ? 这两个文件;多个APP接入友盟产商推送时,需要各自新建 XXXPushNotifyActivity 类文件用于接收产商推送 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

????????不使用插件时: APP每次接入微信支付微信分享时,都需要配置?包名.wxapi.WX 文件,并在里面编写对应的逻辑代码,没有复用性;每次接入友盟产商推送时,都需要配置?XXXPushNotifyActivity?类文件用于接收产商推送,并在里面编写对应的逻辑代码,没有复用性;

????????使用插件:根据插件的接入文档,将组件中的 WXEntryActivity 包名动态修改为应用包名,并在回调处处理对应逻辑;将组件中的 XXXPushNotifyActivity 包名动态修改为产商推送后台配置的路径名,并在回调处处理跳转逻辑;

2.插件是怎么生效的

2.1.插件的使用流程

简单地介绍下插件的使用流程 ,以 友盟推送插件 为例子

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories{
        maven {
            url "xxx/"
        }
        maven { url 'https://repo1.maven.org/maven2/' }
        maven { url 'https://developer.huawei.com/repo/' }
    }
    dependencies {
        。。。
        //友盟推送配置插件
        classpath 'xxxx:push-umeng-plugin:1.0.2-SNAPSHOT'
    }
}

allprojects {
    。。。
    repositories{
        maven {
            url "xxxx"
        }
        maven { url 'https://repo1.maven.org/maven2/' }
        maven { url 'https://developer.huawei.com/repo/' }
    }
}

首先在项目根目录下的 build.gradle 中配置插件的仓库地址 maven、插件地址 classpath

//应用 友盟推送配置插件
apply plugin: 'xxxx.push.umeng.plugin'
//友盟推送配置
pushUmengConfig {
    //用于 UMConfigure.setLogEnabled
    //     MobclickAgent.setDebugMode
    umeng_is_debug = UMENG_DEBUG

    //友盟app key
    umeng_app_key = UMENG_APPKEY
    umeng_channel = UMENG_CHANNEL
    umeng_message_secret = UMENG_MESSAGE_SECRET

    //小米推送配置
    xiaomi_id = UMENG_PUSH_XIAOMI_ID//appId
    xiaomi_key = UMENG_PUSH_XIAOMI_KEY//appKey

    //魅族推送配置
    meizu_app_id = UMENG_PUSH_MEIZU_APP_ID;//appId
    meizu_app_key = UMENG_PUSH_MEIZU_APP_KEY;//appKey

    //OPPO推送配置
    oppo_app_key = UMENG_PUSH_OPPO_APP_KEY//appKey
    oppo_app_secret = UMENG_PUSH_OPPO_APP_SECRET;//appSecret

    //vivo配置
    vivo_app_id = UMENG_PUSH_VIVO_APP_ID//
    vivo_api_key = UMENG_PUSH_VIVO_API_KEY//

    //华为配置
    huawei_app_id = UMENG_PUSH_HUAWEI_APP_ID//
}

根据插件的说明文档,在app下新建?push-umeng-support.gradle 文件,并进行上诉的配置参数

apply plugin: 'com.android.application'

//友盟推送插件配置:(该配置必须在其他三方插件前面,否则可能因为其他三方插件,导致友盟推送配置失败!!!)
apply from: 'push-umeng-support.gradle'

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

android {
    。。。
}

dependencies {
    。。。
    //友盟推送依赖库组件
    implementation 'xxxx:push-umeng-core:1.1.6-SNAPSHOT'
}

在 app 的 build.gradle 中配置,应用插件,完毕!

2.2.插件的生效流程

简单地介绍下插件的生效流程 ,以 友盟推送插件 为例子

class PushUmengPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        //应用 apply from: 'push-umeng-support.gradle' 插件的模块
        //模块的build.gradle全部配置完后,执行task
        project.afterEvaluate {
            //创建第一个 push manifest task,在 process${capitalizeVariantName}Manifest 之后执行,修改 AndroidManifest.xml
            //1.添加友盟配置 UMENG_CHANNEL
            //2.添加 vivo 渠道配置 com.vivo.push.api_key com.vivo.push.app_id
            //3.添加 huawei 渠道配置,com.huawei.hms.client.appid

            //创建第二个 push proguard task,在 Proguard 混淆 task之前执行,在 push manifest 之后执行
            //1.如果 proguardEnable==true,则添加混淆配置文件 到 混淆文件列表中
        }
        //BaseAppModuleExtension
        val extension = project.extensions.getByName("android") as BaseAppModuleExtension
        //注入Transform对象,在 merge{capitalizeVariantName}Assets 之后执行转换
        //将 push-umeng-core 组件中的推送配置参数修改掉,完成推送配置
        extension.registerTransform(PushUmengTransform(project))
    }
}

在合并处理完并输出 AndroidManifest.xml 文件之后,插件将该文件复制保留一份,命名为?PushUmengOriginalAndroidManifest.xml ,然后将源文件进行修改,并保存。

在混淆 task 之前,将混淆配置加入到混淆列表中。

在转换 task 过程中,将 push-umeng-core 组件中的推送配置参数修改掉,完成推送配置

3.插件开发简单示例

?插件可以使用 groovy 以及 kotlin 语言开发,这里就2个都给上例子

首先新建一个 buildScr 文件夹,该文件夹在 build 的时候,会自动应用到项目中,无需在?settings.gradle ?中配置

buildScr.jpg?

?GroovyLanguagePlugin.groovy

?KotlinLanguagePlugin.kt

GroovyLanguagePlugin.properties?

KotlinLanguagePlugin.properties?

build.gradle?

然后在 app 模块下的 build.gradle 中配置插件

?编译运行 ?Build -> Rebuild Project?,会打印日志

?至此我们简单地介绍了下Android Gradle Plugin插件开发,下一篇,有缘再见

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 12:02:39  更:2021-09-30 12:03:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:37:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码