android (多moudle集成aar的另一种思路)app集成第3方app的方案记录
来源:互联网 发布:mac 系统重装 编辑:程序博客网 时间:2024/05/21 15:45
对于第3方应用接入到自己的应用,采取什么形式,做到方便接入,又方便维护和升级,自己想的一个解决方案如下:现采用的是将第3方app对外的所有功能打成aar包上传到maven服务器,然后宿主app进行依赖第3方App的aar。 此方案实现步骤如下,step 1.因为要打成aar提供给宿主app使用,第3方app在分支代码需要去掉application和入口Activity配置,在App的application生命周操作需,第3方 app需要依赖改模块,在主moudle模块的buidl.gradle文件中引用 compile 'com.xuebang.android.xhapp.thridapppublic:AppBridge:1.0.3')实现IThirdApp的接口类。里面就有appLication的生命周期和启动第3方app的方法。完成所有方法实现之后,到这一步这就完成了对接代码的部分。
step 2.第2步就是将第3方app的所有需要提供给宿主app用到的功能moudle打包成aar上传到服务器了。将uploadaar.gradle放在整个项目的根目录下(既和settings.gradle在同一级),
将所有的需要提供给宿主App的moudle的build.gradle文件下添加如下代码apply from: '../uploadaar.gradle' 既完成了要上传moudle的aar的配置。
step 3.将如下代码写到主moudle下面build.gradle最下面(也可以是其他moudle下面)
/****************************************代码保护线************************************************/task uploadAllAar(dependsOn:getAllUploadAarTask()){ println "上传所有的aar完成"}def getAllUploadAarTask(){ Set<Task> allUploadAarTasks=new HashSet<Task>(); Set<Project> allProjects= getRootProject().getAllprojects() allProjects.each{ Project project-> Set<Task> uploadAarTasks= project.getTasksByName("uploadArchives",true) if (uploadAarTasks!=null&&uploadAarTasks.size()>0){ allUploadAarTasks.addAll(uploadAarTasks) } } return allUploadAarTasks}/***********************************代码保护线*****************************************************/
这脚本是用于批量执行上传aar到maven的。
step 4.到此集成完毕,只要运行一下主moudle的getAllUploadAarTask方法,就可以将你的需要提供给宿主app的arr上传到maven服务器,这样对于2方都方便维护和管理向宿主app提供的信息如下: a:将实现了IThirdApp的接口类的这个类名(需要该类的全类名,例如:com.x.x.IThirdAppImlp) b:主moudle的名字和整个工程的名字告诉宿主app的开发者
说明:1.文中的主moudle这里的主表示需要提供给宿主app的根moudle,可能工程有多个moudle 。但是像登陆的moudle这个不必要提供给宿主app,因为用不到
2.compile 'com.xuebang.android.xhapp.thridapppublic:AppBridge:1.0.3' 其实我做的一个公共模块,其实只有IThirdApp这个接口,用于app与app之间的对接代码(由第3方的app的实现,然后由宿主App来调用,其实就使用反射拿到第3方App的那个实现类在宿主App中的实现功能),代码如下:package com.xuebang.android.xhapp.thridapppublic;import android.content.Context;/** * Created by yich *<p> * 第3方的app实现该接口之后,把实现该接口的类名(要全路径)发给要接入的宿主app的开发者 *</p> * Remeark:第3方app实现的接口 */public interface IThirdApp { /** * application的AttachBaseContext生命周期接口的代理 * @param base application的上下文 */ void applicationAttachBaseContext(Context base); /** * application的OnCreate生命周期接口的代理 */ void applicationOnCreate(); /** * 用于整个App销毁时的操作 */ void onApplicationDestory(); /***启动第3方app的方法 * @param context 上下文 * @param startParams 启动参数(理论上可以为null,第3方的App的启动方法,有些启动需要一些参数,则需第3方app与宿主app协商参数) */ void startMoudle(Context context, String... startParams);}
特殊说明:由于app的buildtool和一些公用库等的引用冲突和不协调,需要双方来协调哈哈
最后uploadaar.gradle的代码如下import org.w3c.dom.Nodeapply plugin: 'maven'//要发布的aar的版本,每次更新这里def VERSION_NAME="1.0.0"def maven_user_name="XXX"def maven_user_pass="XXX"def XML_NAME_SPACE="{http://maven.apache.org/POM/4.0.0}"def RELEASE_REPOSITORY_URL="XXX"uploadArchives { repositories { mavenDeployer { pom.version = VERSION_NAME pom.packaging = 'aar' pom.withXml { println "ARR的version的值为"+VERSION_NAME List depens= asNode().children() depens.each{ Node singleNode-> if (singleNode.name().toString().equals(XML_NAME_SPACE+"dependencies")){ singleNode.children().each{ Node dependNode-> if (dependNode.name().toString().equals(XML_NAME_SPACE+"dependency")){ dependNode.children().each{ Node dependChildNode-> if (dependChildNode.name().toString().equals(XML_NAME_SPACE+"version")&&dependChildNode.value().toString().equals("[unspecified]")){ dependChildNode.setValue(VERSION_NAME)// println "version的值为"+dependChildNode.value() } } } } } } } repository(url: RELEASE_REPOSITORY_URL) { authentication(userName: maven_user_name, password: maven_user_pass) } } }}/**********************************************上传所有需要的上传的moudle的aar包********************************************** * 同时执行所有上传aar的任务的project * ****************************************************//*task uploadAllAar(dependsOn:getAllUploadAarTask()){ println "上传所有的aar完成"}def getAllUploadAarTask(){ Set<Task> allUploadAarTasks=new HashSet<Task>(); Set<Project> allProjects= getRootProject().getAllprojects() allProjects.each{ Project project-> Set<Task> uploadAarTasks= project.getTasksByName("uploadArchives",true) if (uploadAarTasks!=null&&uploadAarTasks.size()>0){ allUploadAarTasks.addAll(uploadAarTasks) } } return allUploadAarTasks} */
阅读全文
1 0
- android (多moudle集成aar的另一种思路)app集成第3方app的方案记录
- Android集成第三方app的两种方式
- 集成第三方组件--Android APP集成腾讯X5 WebKit
- 集成第三方组件--Android APP集成腾讯X5 WebKit
- android superWebView ----新的 Hybrid App 解决方案(集成总结)
- 测试App组件的集成
- APP引导页的集成
- android app集成第三方SDK--没有说明文档
- 利用Android Studio在App中集成第三方支付
- 关于Android APP在线热修复bug方案的调研(三)(集成Nuwa遇到的坑与解决)
- 在你的android APP中集成JPush极光推送
- Android Studio 导入aar库的方法(二)作为一个独立的Moudle
- Android云巴集成第三方推送实现APP伪保活(小米篇)
- 手机APP自动化持续集成方案
- spring+struts的集成(第一种集成方案)
- spring+struts的集成(第一种集成方案)
- spring+struts的集成(第一种集成方案)
- App集成ApplePay的一些资料整理
- Day49-Spring-03
- SocksCap64全局代理设置教程
- HDU_1671 POJ_3630 Phone List 【字典树】
- NYOJ 34 韩信点兵
- 前端小知识点
- android (多moudle集成aar的另一种思路)app集成第3方app的方案记录
- 收藏安装Python
- SQL语言基础回顾整理
- 假如时光倒流,我会这么学习Java
- csu8月月赛,csuoj1978
- 程序员成神之路(序章)
- PowerDesigner最基础的使用方法入门学习
- 即时通讯软件的整理与心得
- EasyDemo*andorid面试常见题