# and-plugin **Repository Path**: longyn/and-plugin ## Basic Information - **Project Name**: and-plugin - **Description**: Android 零反射插件化框架 - **Primary Language**: Kotlin - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-04 - **Last Updated**: 2025-07-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # andPlugin 一个零反射实现的插件化Android 开源库 ## 导入仓库 ```groovy maven { credentials { username '6166b8fa89e1d5005a9f5792' password 'W49P9mYH7aoH' } url 'https://packages.aliyun.com/648532a2b44b3d9a1d166c4d/maven/2386483-release-mhuqvd' } //settings.gradle 示例 pluginManagement { repositories { //阿里开源镜像仓库 maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/public' } maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } //个人阿里仓库 maven { credentials { username '6166b8fa89e1d5005a9f5792' password 'W49P9mYH7aoH' } url 'https://packages.aliyun.com/648532a2b44b3d9a1d166c4d/maven/2386483-release-mhuqvd' } google { content { includeGroupByRegex("com\\.android.*") includeGroupByRegex("com\\.google.*") includeGroupByRegex("androidx.*") } } mavenCentral() gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { //阿里云镜像仓库 maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/public/' } maven { url 'https://maven.aliyun.com/repository/central' } maven { url 'https://maven.aliyun.com/repository/jcenter' } maven { url 'https://maven.aliyun.com/nexus/content/groups/public' } //个人阿里仓库 maven { credentials { username '6166b8fa89e1d5005a9f5792' password 'W49P9mYH7aoH' } url 'https://packages.aliyun.com/648532a2b44b3d9a1d166c4d/maven/2386483-release-mhuqvd' } google() mavenCentral() maven { url 'https://jitpack.io' } } } ``` ## 宿主 ### 导入依赖 ```groovy implementation 'com.lyn:pluginApi:1.0.0' implementation 'com.lyn:pluginHost:1.0.0' implementation 'com.lyn:io:1.2.3' implementation 'com.google.code.gson:gson:2.10.1' ``` ### 初始化 ```kotlin PluginHostManager.instance.initialize(this){ //初始化回调监听 initializeLiveData.postValue(Any()) } //示例 class App : Application() { companion object{ val initializeLiveData:MutableLiveData = MutableLiveData() } override fun onCreate() { super.onCreate() // 在Application 初始化 PluginHostManager.instance.initialize(this){ //初始化回调监听 initializeLiveData.postValue(Any()) } } } ``` ### 加载全部插件 ```kotlin val pluginInfos = PluginHostManager.instance.loadAllPlugin() //示例 class PluginViewModel : ViewModel() { val pluginInfoLiveData:MutableLiveData> = MutableLiveData() fun loadAllPlugin(){ viewModelScope.launch(Dispatchers.IO){ //加载全部插件 val pluginInfos = PluginHostManager.instance.loadAllPlugin() pluginInfoLiveData.postValue(pluginInfos) } } } ``` ### 打开插件 ```kotlin PluginHostManager.instance.openPlugin(item.pluginInfo.id){} ``` ### 关闭插件 ```kotlin PluginHostManager.instance.closePlugin(item.pluginInfo.id){} ``` ### 删除插件 ```kotlin PluginHostManager.instance.removePlugin(item.pluginInfo.id){} ``` ## 插件 ### 创建插件 1、创建app 模块 ![img.png](img.png) 2、删掉生成的类文件 ### 导入gradle 插件 ```groovy //项目根目录 id 'com.lyn.andplugin' version '1.0.0' apply false ![img_1.png](img_1.png) //插件app模块 根目录下的 build.gradle 添加 plugins.apply('com.lyn.andplugin') ![img_2.png](img_2.png) ``` ### 导入依赖 ```groovy implementation 'com.lyn:pluginApi:1.0.0' implementation 'com.lyn:plugin:1.0.0' implementation 'com.lyn:io:1.2.3' implementation 'com.google.code.gson:gson:2.10.1' ``` 创建插件类文件 MainPlugin ```kotlin //添加 @PluginLauncher 注解 这个必须要 不然会找不到插件启动类 @PluginLauncher(id = "abc123", name = "测试插件", version = 1) class MainPlugin : Plugin() { private lateinit var pluginMainBinding: PluginMainBinding private val nv21:Nv21 = Nv21() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) pluginMainBinding = PluginMainBinding.inflate(getLayoutInflater()) setContentView(pluginMainBinding.root) } } ``` ### 编译插件 ![img_3.png](img_3.png) 点击对应编译对应版本插件 编译出的插件会生成当前插件根目录pluginDebug 或者 pluginRelease ![img_4.png](img_4.png) ### 加载使用插件 1、用Android studio Device Explorer 将插件文件上传复制到 你的宿主app data/data/_你的宿主applicationId_/files/pluginRoot 2、调用宿主的 加载全部插件方法即可加载插件