1.插件化bug1-插件微信启动黑屏
在插件启动的时候会调用activity切换动画,在activitymanagerservice.java中(如上图) 调用了wms的overrPendingAppTransition方法,wms接受的参数是enterAnim 和 exitAnim这个资源ID,wms会去外部的微信apk里面查找这两个资源ID,所以如果宿主程序外部的微信和微信插件版本相同,那么就能顺利找到动画,如果版本不同那么资源ID在宿主外部的微信就不存在这个资源ID就会黑屏。
这个理解了也就理解为什么很多插件化框架不支持插件发送notifaction里面包含资源ID了。
image
====================================================================================================================
2.插件化bug2-插件内相机无法启动
调查发现是插件内的相机是从AOSP6.0源码下的Camera编译得到的,在JNI内部会调用System/lib/libjpeg.so里面的一个函数,而在android8.0上面这个函数没有了
解决方法:在AOSP8.0上面重新编译Camera的JNI层的so,在Java层根据不同的Android版本loadLibraray不同版本的so
======================================================================================================================
3.插件化bug2-插件内浏览器下载应用奔溃
liulishuo.filedownloader替代系统的DownloadManager,因为系统的DownloadManager无法把文件下载到/data/data/com.android.secspce/插件目录/中
========================================================================================================================
除了应用隔离以外的数据隔离:
Intent隔离
比如:
打开浏览器
拨打电话
发送短信/彩信
播放多媒体
打开相机
从gallery选取图片
打开录音机
跳转至应用详情页
打开联系人
插件跳转插件
安装和卸载apk
相关类方法:
com.lody.virtual.client.hook.proxies.am.MethodProxies ->startActivity,需对相应的intent进行修改,同时域内需保证有应用接收修改后的intent
Provider隔离
Contacts
Mms
CallLog
Download(VA自带)
Settings(VA自带)
Media
VoiceMail
相关类:
com.lody.virtual.client.hook.providers
com.lody.virtual.client.hook.proxies.am.MethodProxies ->getContentProvider(),在该方法中替换掉本来的Authority
com.lody.virtual.client.hook.providers.ProviderHook ,该类中维护一个PROVIDER_MAP,lody已经做了download和settings provider的hook,照猫画虎
MediaProviderHook:replaceExternal2Internal(),把读取External Media Provider的uri 重定向为 Internal Media Provider
另外需提供联系人provider供第三方调用以及保障internal media provider的数据来源。
当前internal media provider数据采用FileObserver监听指定目录的方式相关类为com.secspace.fileobsever
存储隔离
hook重定向内置存储和外置TF卡路径,将存储在内置存储的文件转移到/data/data/com.android.secspace/内置存储/,将存储到TF卡中的文件转移到 /外置sdcard/Android/data/com.android.secspace下
当/data/data/com.android.secspace/内置存储/路径下有新增文件的时候通过FileObserver手动添加到 Internal Media Provider
相关类
com.lody.virtual.client.hook.proxies.mount
com.secspace.fileobsever.FileObserverService