# solitude **Repository Path**: longyn/solitude ## Basic Information - **Project Name**: solitude - **Description**: Android 插件化框架 - **Primary Language**: Unknown - **License**: Unlicense - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-05-13 - **Last Updated**: 2024-08-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # solitude(孤独的插件) #### 介绍 这是一个Android 插件化 开发框架 虽然插件化 已经没有当年的热度 很多人都放弃去研究 。。。。 算了不 bb 了 搜哈 搜哈是一种智慧 ![输入图片说明](assets/demo.gif) #### 使用说明 1.导入maven仓库(宿主和插件都是同一个仓库地址) ![输入图片说明](https://foruda.gitee.com/images/1716627579405530596/644dda42_7683638.png "屏幕截图") ``` maven { credentials { username '6166b8fa89e1d5005a9f5792' password 'W49P9mYH7aoH' } url 'https://packages.aliyun.com/maven/repository/2386483-release-mhUqVd/' } ``` ### 宿主 1. 导入依赖 ``` implementation 'com.longyn:convenitent:1.0.2' implementation 'com.lyn.solitude:plugin-api:1.1.7' implementation 'com.lyn.solitude:plugin-host:1.1.7' implementation 'com.alibaba:fastjson:1.2.76' ``` 2. 代码使用api ``` 使用静态类 PluginManager /** * @author longyn 2024/5/12 * @version 1.0.0 */ object PluginManager { private const val TAG = "PluginManager" @JvmStatic lateinit var application: Application @JvmStatic var pluginHostAidl: PluginHostAidl? = null @JvmStatic fun initialize(application: Application) { PluginManager.application = application } /** * 安装插件 * @param path 插件路径 */ @JvmStatic fun install(path: String): Boolean { try { return pluginHostAidl?.install(path) == true } catch (e: Throwable) { e.printStackTrace() } Log.d(TAG,"安装失败") return false } /** * 卸载插件 * @param id 插件id */ @JvmStatic fun uninstall(id: Long): Boolean { try { return pluginHostAidl?.unInstall(id) == true } catch (e: Throwable) { e.printStackTrace() } Log.d(TAG,"卸载失败") return false } /** * 获取插件 * @param id 插件id */ @JvmStatic fun getPlugin(id: Long): Plugin? { try { pluginHostAidl?.getPlugin(id)?.let { return Plugin.toPlugin(it) } } catch (e: Throwable) { e.printStackTrace() } return null } /** * 获取全部插件 * @return 插件列表 */ @JvmStatic fun getAllPlugin(): MutableList? { try { pluginHostAidl?.allPlugin?.let { return Plugin.toListPlugin(it) } } catch (e: Throwable) { e.printStackTrace() } return mutableListOf() } /** * 获取插件logo * @param id 插件id */ @JvmStatic fun getLogo(id: Long): Bitmap? { try { pluginHostAidl?.getLogo(id)?.let { return BitmapFactory.decodeByteArray(it, 0, it.size) } } catch (e: Throwable) { e.printStackTrace() } return null } /** * 打开插件 * @param id 插件id */ @JvmStatic fun open(id: Long): Boolean { try { return pluginHostAidl?.open(id) == true } catch (e: Throwable) { e.printStackTrace() } return false } /** * 跳转插件 * @param id 插件id * @param className 跳转类名 */ @JvmStatic fun jump(id: Long, className: String?): Boolean { try { return pluginHostAidl?.jump(id, className) == true } catch (e: Throwable) { e.printStackTrace() } return false } } ``` ### 插件 1. 导入依赖 ``` implementation 'com.lyn.solitude:plugin-api:1.1.7' implementation 'com.lyn.solitude:plugin-support:1.1.7' ``` 2. 代码使用 第一步 创建一个无activity app工程 ![输入图片说明](https://foruda.gitee.com/images/1716628486586810505/c52972f1_7683638.png "屏幕截图") 第二步 修改AndroidManifest.xml 里面的配置必须按下图去配置插件属性 ![输入图片说明](https://foruda.gitee.com/images/1716628384111579423/97f12a8a_7683638.png "屏幕截图") 第三步 修改app 的build.gradle 在 android{} 里面添加 ``` viewBinding{ enabled = true } aaptOptions { additionalParameters '--allow-reserved-package-id','--package-id','0x7a' } ``` ![输入图片说明](https://foruda.gitee.com/images/1716628622912344422/12a6f50a_7683638.png "屏幕截图") 第四步 编写 MainPlugin 继承 BasePlugin 里面的泛型传viewBinding 布局 ![输入图片说明](https://foruda.gitee.com/images/1716628736433487879/dbe7ac0d_7683638.png "屏幕截图") 第五步 配置 AndroidManifest.xml 里面的 plugin_uuid main_plugin_class_name plugin_version ``` 这里这个必须是唯一的 ``` ### 以上这些都配置好后 就可以点击 Make Module 编译 插件app了 ![输入图片说明](https://foruda.gitee.com/images/1716628987936604762/203ad2fd_7683638.png "屏幕截图") #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)