【教程】android实现插件功能
aide吧
全部回复
仅看楼主
level 13
tommy990607
楼主
相信大家在pc上都看到了很多软件都支持插件吧,但在安卓平台上比较少,例如xposed等等,但而且其中需要安装插件,不能直接放置到指定目录,
不怎么方便。到底怎么实现电脑上的插件功能呢?
2015年05月04日 05点05分
1
level 13
tommy990607
楼主
可能很多人想到的都是java里面的动态加载class技术吧,
但是这在安卓上是行不通的,安卓上是加载dex的而不是class,
所以安卓上的ClassLoader的loadClass方法直接抛出一个错误就没了,但是这没关系,他还有两个子类
,分别叫PathClassLoader和DexClassLoader,都是用来加载dex文件中的,区别是前一个类只能加载dex文件,后一个可以加载apk,jar等文件。
2015年05月04日 05点05分
2
凯达食府
补充,pathclassloader只能加载已安装的apk的
2015年05月05日 03点05分
tommy990607
确实如此,已安装apk会在某处有dex缓冲(具体目录不记得了)
2015年05月05日 03点05分
level 13
tommy990607
楼主
DexClassLoader classLoader=new DexClassLoader(apkPath,binPath,null,getClassLoader());
2015年05月04日 05点05分
3
level 13
tommy990607
楼主
这就是DexClassLoader的主要构造函数了,第一个是apk路径,第二个是dex缓存目录(不能在sd卡里),第三个是库目录,第四个是父ClassLoader。然后你就可以使用loadClass("类名")获得相应的类,然后进行newInstance或者是其他操作了。
2015年05月04日 05点05分
4
tommy990607
详情请查看例子
2015年05月04日 05点05分
level 13
tommy990607
楼主
备注:由于在aide上暂时不能引用jar库,所以只能通过修改/sdcard/.aide/android.jar这个文件了。
2015年05月04日 05点05分
5
level 13
tommy990607
楼主
以上就是实现安卓上的插件功能的主要步骤了,是不是非常简单呢?你还可以通过getPackageManager().getPackageArchiveInfo(apkPath,flags)来得到该插件的ApplicationInfo,从而获得插件的一些包信息,例如包名,名称,图标等。
2015年05月04日 05点05分
6
凯达食府
你这个方法不行, 就拿获取应用图标来说吧,不信你用你这个试试,获取的基本都是安卓那个机器人图标 通常获取图标还是反射,当然了,反射用多了软件效率会变低,不过目前貌似没有更好的解决方法
2015年05月05日 02点05分
tommy990607
回复
����ʳ��
:其实是可以的,只要设置一下publicSourceDir就好了,代码如下: appInfo.sourceDir=apkPath; appInfo.publicSourceDir=apkPath; 只要设置了这个以后就可以用loadIcon获取图标了。
2015年05月05日 03点05分
tommy990607
回复
����ʳ��
:我原先获取软件名也是只得到包名,但是设置了这个就没问题了。
2015年05月05日 03点05分
level 13
tommy990607
楼主
下面发个例子:
2015年05月04日 05点05分
7
level 12
citizenll💯
我是例子
2015年05月04日 05点05分
8
level 13
tommy990607
楼主
例子来了:
[无效] http://pan.baidu.com/share/link?shareid=2179056584&uk=4178340360
里面的android.jar是我修改过的android.jar,直接复制到/sdcard/.aide处覆盖即可。
2015年05月04日 05点05分
9
level 13
tommy990607
楼主
完结
2015年05月04日 05点05分
11
level 12
天下12389GG
楼主高大上。
2015年05月04日 05点05分
12
level 9
827565963
虽然看不明白,但觉得很厉害的样子
2015年05月04日 06点05分
13
level 13
沫湮_
顶!!!话说UC里的插件就是这玩意儿?
2015年05月04日 07点05分
14
level 12
盼我疯魔🌀
一直都懂,只是用不到
2015年05月04日 07点05分
15
level 15
º花花画海海
用不到。已给精。话说你不是要申请吧主么
2015年05月04日 08点05分
16
tommy990607
后来忘了
2015年05月05日 03点05分
º花花画海海
回复 tommy990607 :
2015年05月05日 04点05分
tommy990607
回复
fly�˵�����
:我申请了,快同意吧
2015年05月05日 10点05分
level 7
金晶2005
好
2015年05月05日 02点05分
18
level 8
凯达食府
从google下载了个库,可以直接打开sdcard上未安装的apk
2015年05月05日 02点05分
19
level 8
凯达食府
真正用的时候还需要重写dexclassloader,不然没意思了,只加载个dex还不够吧,资源,so库神马的也得要加载,dl框架有插件开发规范,感觉不爽,demo
ht吞tp://pan.baidu.com/share/link?sh吞areid=1183186564&uk=2706594367&third=15
2015年05月05日 02点05分
20
tommy990607
其实动态加载so也不难,我到时候更新一下吧
2015年05月05日 03点05分
level 12
落叶似秋yan
不支持我不姓落!
2015年05月05日 03点05分
21
tommy990607
你真的信落?
2015年05月05日 03点05分
落叶似秋yan
@tommy990607
请看id
2015年05月05日 06点05分
tommy990607
回复
��Ҷ����yan
:我说的是你的真名
2015年05月05日 10点05分
落叶似秋yan
@tommy990607
→_→你猜
2015年05月05日 12点05分
1
2
尾页