CJFrameForAndroid

Android插件化开发,运行未安装apk中的Service

和自甴很熟 提交于 2019-12-03 23:07:28
如果你还不知道什么叫插件化开发,那么你应该先读一读之前写的这篇博客: Android插件化开发,初入殿堂 上一篇博客主要从整体角度分析了一下Android插件化开发的几个难点与动态加载没有被安装的apk中的Activity和资源的方法。其实一般的插件开发主要也就是加载个Activity,读取一些资源图片之类的。但是总有遇到特殊情况的时候,比如加载Service。 要动态加载Service,有两种思路:一是通过NDK的形式,将Service通过C++运行起来(这种方法我没有尝试,只听群里的朋友说实现过);另一种就是我使用的,具体思路和上一篇中提到加载Activity的方法一样,使用托管所的形式,由于上一篇博客没有讲清楚,这里就详细讲一下通过托管所实现加载插件中Service的方法。 以下几点是每一个Android开发组肯定都知到的: 一个apk如果没有被安装的话是没有办法直接运行的。一个JAVA类的class文件是可以通过classload类加载器读取的。一个apk实际上就是一个压缩包,其中包含了一个.dex文件就是我们的代码文件。那么,接下来基本思路我们就可以明确了:apk没办法直接运行,apk中有代码文件,代码文件可以被classload读取。 在Android中有两种classload,分别是DexClassLoader、PathClassLoader。后者只能加载/data

Android插件化开发,初入殿堂

跟風遠走 提交于 2019-12-02 19:34:33
好久没有写博客了,这次准备写写我这几天的研究成果——Android插件化开发框架 CJFrameForAndroid。 背景交代 首先,你需要知道什么是插件化开发。就拿最常见的QQ来说,在第三个界面动态那里有个管理,点开后可以选择很多的增植功能,这里腾讯只放了一些网页应用,那么如果未来想加入一个打飞机游戏,要怎么做?让用户重新安装吗,这就是插件化开发所解决的问题。 用一句话来概括插件式开发:你基本上可以理解为让一个apk不安装也可以被运行。只不过这个运行是有很多限制的运行,所以才叫插件否则就叫病毒了。其实在目前淘宝、百度、腾讯、等都有成熟的动态加载框架,包括apkplug,但是它们都是不开源的。 说一下我认为这项技术的难点: 1、一个未被安装的apk正常情况无法被运行;2、这个apk的资源没办法被引用;3、这个apk的界面就算被加载,也没办法与用户交互。 最初查遍了资料,第一点好解决,在Android中有一个dexClassLoad类加载器,大家应该明白了,就是通过反射加载一个类来运行。第二点,网上有两种方法:可以将插件的资源放到sd卡上通过流的形式读取,不过也有人反对说用流读取会有问题,通配性太差;一种比较好的解决办法是将apk中的资源复制一份到当前app内,然后就可以加载了。这种办法是不错,但是用户每下载一次插件就复制一份,久而久之,对空间要求太高了,还有就是第三点也没办法解决