社区
Android
帖子详情
用apkPlug插件化开发 启动插件的时候 ,需要几秒钟,有点慢,这个怎么解决啊
三目少爷
2018-03-01 10:01:13
用apkPlug插件化开发 启动插件的时候 ,需要几秒钟,有点慢,这个怎么解决啊
...全文
285
回复
打赏
收藏
用apkPlug插件化开发 启动插件的时候 ,需要几秒钟,有点慢,这个怎么解决啊
用apkPlug插件化开发 启动插件的时候 ,需要几秒钟,有点慢,这个怎么解决啊
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
android
插件
化
开发
整理的android
插件
化
开发
文档,
apk
plug
框架
插件
化
apk
plug
开发
案例
apk
plug
插件
化
开发
框架的
开发
demo,功能展示的很到位
Apk
plug
模块
化
开发
SDK接入快速指导V1.0.pdf
Android模块
化
开发
,安织云 -
apk
plug
apk
plug
apk
plug
apk
plug
apk
plug
apk
plug
apk
plug
框架为
开发
者提供
插件
化
,模块
化
,轻应用
开发
方案。你可利它
解决
轻应用
开发
方案。你可利它
解决
apk
apk
apk
文件过大 ,代码臃肿 ,更新代价大等问题 。以及支撑应用内更新 ,支撑第三方
插件
接 入等功能 。同时 AP KP LUGLUG 还提供移动广告平台聚合 Ads
Plug
Ads
Plug
Ads
Plug
Ads
Plug
Ads
Plug
Ads
Plug
Ads
Plug
,移动支付聚合 ,渠道接入等 众多实用
开发
工具。
android
插件
化
开发
demo 网络更新
插件
版
前段时间发布了
apk
plug
的本地应用,今天发布
apk
plug
插件
化
demo的网络版,你可以通过网络来更新
插件
。想理解更多可以访问博客http://blog.csdn.net/o1587790525/article/details/11891997
Android
插件
框架Android-
Plug
in-Framework.zip
Android-
Plug
in-Framework 此项目是Android
插件
框架完整源码以及实例。用来
开发
Android
插件
APK
,并通过动态加载的方式在宿主程序中运行。 若
插件
APK
是完全独立的
APK
,那么
插件
apk
也可独立安装运行。 若
插件
APK
不是完全独立的
apk
,比如和
插件
宿主程序共用一些依赖库,那么
插件
apk
只能在宿主程序中运行。不可独立运行。 因为此时
插件
apk
的代码是不完整的。 目录结构说明:
Plug
inCore工程是
插件
库核心工程。用于提供对
插件
功能的支持。
Plug
inMain是用来测试的
插件
宿主程序Demo工程。
Plug
inShareLib是用来测试的
插件
宿主程序的依赖库Demo工程
Plug
inTest是用来测试的
插件
Demo工程。此工程下有用来编译
插件
的ant脚本。 宿主程序工程可以通过ant编译或者导入eclipse后直接点击Run菜单进行安装。
插件
Demo工程
需要
通过
插件
ant脚本编译。编译命令为 “ant clean debug” 原因是Demo中引用了宿主程序的依赖库。
需要
在编译时对共享库进行排除。
插件
编译出来以后,可以将
插件
复制到sdcard,然后在宿主程序中调用
Plug
inLoader.install
Plug
in("
插件
apk
绝对路径")进行安装 还有一种简易的安装方式,是使用编译命令为 “ant clean debug install” 直接将
插件
apk
安装到系统中,
Plug
inMain工程会监听系统的应用安装广播,监听到
插件
apk
安装广播后, 再自动调用
Plug
inLoader.install
Plug
in("/data/app/
插件
apk
文件.
apk
")进行
插件
安装。免去复制到sdcard的过程。 (虽然没有用过
apk
plug
、以及另外一个
插件
框架作者singwhatiwanna写的DL框架,但是看过他们的一些介绍文档,感觉自己的这份实现应该是更简单易用更完善。。。哈哈,是不是有王婆卖瓜的嫌疑。) 已支持的功能: 1、
插件
apk
无需安装,由宿主程序动态加载运行。 2、
插件
形式支持fragment和activity代理。 这两种形式是
插件
开发
中的两种主要形式。 3、
插件
支持activity非代理模式,真正实现Activity无需注册,既不用反射,也不用代理,实现Activity完整生命周期。 4、
插件
库
apk
可无任何特殊代码。如
插件
中的fragment,activity等无需继承任何特定基类或接口。完全和普通app代码没有区别. 5、支持
插件
共用宿主程序依赖库提供的自定义控件 6、支持
插件
中使用自定义控件 7、支持
插件
资源和宿主资源混合使用。意即支持如下场景:
插件
程序和宿主程序共用依赖库时
插件
中的布局文件中使用了宿主程序中的自定义控件,而宿主程序中的自定义控件中又使用 了宿主程序中的布局文件。
插件
代码中无需做任何特殊处理,即可支持这种布局文件。 8、
插件
中的各种资源、布局、R、以及宿主程序中的各种资源、布局、R等可随意使用、也无任何特殊代码。 10、支持
插件
使用宿主程序主题和系统主题 11、
解决
资源id冲突问题。尝试做过
插件
开发
的同学应该都遇到,
插件
资源id和宿主程序资源id可能相同,导致获取的资源不是想要的资源。 此问题其实在android提供的编译器aapt中早已提供了支持。 12、
需要
关注
Plug
inTest工程的ant.properties文件和project.properties文件以及custom_rules.xml文件,
插件
使用宿主程序共享库,以及共享库R引用,和编译时排除的功能,都在这3个配置文件中体现 暂不支持的功能: 1、暂不支持使用
插件
中自定义主题, 2、支持在
插件
中通过R文件使用宿主程序中的资源,暂不支持
插件
资源文件中直接使用宿主程序中的资源。但是支持间接使用。 例如在上述“已支持的功能”6中描述的,实际就是间接使用。 后续
需要
解决
的问题: 1、使支持
插件
自定义主题 2、使
插件
中对activity的支持更稳定。 由于此框架没有实际的项目应用,目前对activity的提供标准API的测试还不够完全,可能在其他
开发
场景中,activity的部分标准API可能会出现问题。毕竟这里使用了很多反射,会涉及到多机型多系统版本的兼容问题。后续还
需要
持续测试和完善 上述第2点问题已
解决
、请看已支持的功能第3条。 3、使支持
插件
资源文件中直接引用依赖库中的资源。目测可能
需要
重写android自带的aapt程序。 实现原理简介: 1、
插件
apk
的class 通过构造
插件
apk
的Dexclassloader来加载
插件
apk
中的类。DexClassLoader的parent设置为宿主程序的classloader,即可将主程序和
插件
程序的class贯通 2、
插件
apk
的资源 通过构造
插件
apk
的AssetManager和Resouce类即可。 本项目最关键一点功能、也是和网上其他
插件
项目不同的地方之一,在于 通过addAssetsPath方法添加资源的时候,同时添加了
插件
程序的资源文件和宿主程序的资源。这样就 可以做到
插件
资源合并。很多资源文件都迎刃而解。 3、
插件
apk
中的资源id 完成上述第二点以后,还有
需要
解决
的难题,是宿主程序资源id和
插件
程序id重复的问题。 这个问题
解决
办法也很简单 我们知道,资源id是在编译时生成的,其生成的规则是0xPPTTNNNN PP段,是用来标记
apk
的,默认情况下系统资源PP是01,应用程序的PP是07 TT段,是用来标记资源类型的,比如图标、布局等,相同的类型TT值相同,但是同一个TT值不代表同一种资源,例如这次编译的时候可能使用03作为layout的TT,那下次编译的时候可能会使用06作为TT的值,具体使用那个值,实际上和当前APP使用的资源类型的个数是相关联的。 NNNN则是某种资源类型的资源id,默认从1开始,依次累加。 那么我们要
解决
资源id问题,就可从TT的值开始入手,只要将每次编译时的TT值固定,即可是资源id达到分组的效果,从而避免重复。 例如将宿主程序的layout资源的TT固定为03,将
插件
程序资源的layout的TT值固定为23,即可
解决
资源id重复的问题了。 固定资源idTT值的版本也非常简单,提供一份public.xml,在public.xml中指定什么资源类型以什么TT值开头即可。 具体public.xml如何编写,可参考
Plug
inMain/res/values/public.xml 以及
Plug
inTest/res/values/public.xml俩个文件,它们是分别用来固定宿主程序和
插件
程序资源id的范围的。 4、
插件
apk
的Context 构造一个Context即可,具体的Context实现请参考
Plug
inCore/src/com/
plug
in/core/
Plug
inContextTheme.java 关键是要重写几个获取资源、主题的方法,以及重写getClassLoader方法 5、
插件
中的LayoutInfalter 通过第4步构造出来的Context获取LayoutInfater即可 6、如何实现
插件
代码不依赖任何特殊代码,如继承特定的基类、接口等。 要做到这一点,最主要的是实现上述第4步,构造出
插件
的Context后,所有问题都可以得到
解决
。 7、
插件
中Activity无需注册,拥有完整生命周期是如何实现的。 众所周知、Activity是系统组件,必须在manifest中注册才能被系统唤起并拥有完整生命周期,通过Activity代理和放射的方式实现的 实际是伪生命周期。并非完整生命周期。那么如果才能实现activity免注册,而且拥有完整的生命周期呢,这要从activity的
启动
流程中 入手。 App安装时,系统会扫描app的Manifest并缓存到一个xml中,activity
启动
时,系统会现在查找缓存的xml,如果查到了,再通过classLoad去load这个class,并构造一个activity实例。那么我们只
需要
将classload加载这个class的时候做一个简单的映射,让系统以为加载的是A class,而实际上加载的是B class,达到挂羊头买狗肉的效果,即可将预注册的Aclass替换为未注册的activity,从而实现
插件
中的Activity 完全被系统接管,而拥有完整生命周期。 在
Plug
inMain和
Plug
inTest已经添加了这种实现方式的测试实例。 8、通过activity代理方式实现加载
插件
中的activity是如何实现的 要实现这一点,同样是基于上述第4点,构造出
插件
的Context后,通过attachBaseContext的方式,替换代理Activiyt的context即可。 另外还
需要
在获得
插件
Activity对象后,通过反射给Activity的attach()方法中attach的成员变量赋值。 这样可
解决
另外一个
插件
框架作者singwhatiwanna实现的代码中所谓this和that的问题。也是可以使
插件
Activity不
需要
继承任何特定基类或者接口的原因。 9、activity代理实现后,其他组件,如service等,如法炮制即可。 10、
插件
编译问题。 如果
插件
和宿主共享依赖库,那边编译
插件
的时候不可将共享库编译到
插件
当中,包括共享库的代码以及R文件,但是
需要
在编译时添加到classpath中,且
插件
中如果要使用共享依赖库中的资源,
需要
使用共享库的R文件来进行引用。这几点在
Plug
inTest示例工程中有体现。 11、
插件
开发
模式
插件
UI可通过fragment或者activity来实现 如果是activity实现的
插件
,则最终会在
Plug
inProxyActivity中运行 如果是fragment实现的
插件
,又分为两种 1种是fragment运行在任意支持fragment的activity中,这种方式,在
开发
fragment的时候,fragmeng中凡是要使用context的地方,都
需要
使用通过
Plug
inLoader.get
Plug
inContext()获取的context,那么这种fragment对其运行容器没有特殊要求 还有1种是,fragment运行在
Plug
inCore提供的
Plug
inSpecDisplayer中,这种方式,由于其运行容器
Plug
inSpecDisplayer的Context已经被
Plug
inLoader.get
Plug
inContext获取的context替换,因此这种fragment的代码和普通非
插件
开发
时
开发
的fragment的代码没有任何区别。
需要
注意的问题 项目
插件
开发
后,特别
需要
注意的是宿主程序混淆问题。宿主程序混淆后,可能会导致
插件
程序运行时出现classnotfound 标签:Android
Android
80,352
社区成员
91,288
社区内容
发帖
与我相关
我的任务
Android
移动平台 Android
复制链接
扫一扫
分享
社区描述
移动平台 Android
android
android-studio
androidx
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章