VirtualApp是一个App虚拟引擎的完整实现(简称VA
)。
VirtualApp允许你在App内创建一个虚拟空间,你可以在虚拟空间内任意的安装
、启动
和卸载
APK,这一切都与外部隔离,就如同一个沙盒
。
运行在VA
中的APK无需在外部安装,即VA支持免安装运行APK。
在项目中,你可以通过引入VA来实现插件化
和双开
,
在安全领域,也可以通过VA来实现动态的App行为分析
,
在测试领域,你可以通过VA来实现高度可定制的App单元测试
.
VirtualApp诞生于2015年,经过一年的锤炼,才有了现在的性
能和兼容性
。
QQ Group: 553070909
注意: 编译和运行项目请关闭你的Instant run.
-
VirtualApp 使用了
@hide API
, 因此你必须使用我们的android.jar
来替换你已有的那个 (Android-SDK/platforms/android-23/{android.jar}). -
在你的
AndroidManifest.xml
添加如下代码:
<permission
android:name="com.lody.virtual.permission.VIRTUAL_BROADCAST"
android:protectionLevel="signature" />
<uses-permission android:name="com.lody.virtual.permission.VIRTUAL_BROADCAST" />
<service android:name="com.lody.virtual.client.stub.KeepService" android:process=":x"/>
<provider
android:process=":x"
android:authorities="virtual.service.BinderProvider"
android:name="com.lody.virtual.service.BinderProvider"
android:exported="false" />
<activity
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:name="com.lody.virtual.client.stub.ShortcutHandleActivity" android:exported="true"/>
<activity
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale"
android:name="com.lody.virtual.client.stub.StubActivity$C0" android:process=":p0" >
<meta-data android:name="X-Identity" android:value="Stub-User"/>
</activity>
<provider
android:process=":p0"
android:authorities="virtual.client.stub.StubContentProvider0"
android:name="com.lody.virtual.client.stub.StubContentProvider$C0"
android:exported="false">
<meta-data android:name="X-Identity" android:value="Stub-User"/>
</provider>
<!--and so on-->
-
将你的Host和Plugins需要的所有权限加入到你的
AndroidManifest.xml
. -
前往你的Application并添加如下代码:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
try {
VirtualCore.getCore().startup(base);
} catch (Throwable e) {
e.printStackTrace();
}
}
@Override
public void onCreate() {
super.onCreate();
VirtualCore.getCore().handleApplication(this);
if (!VirtualCore.getCore().isVAppProcess()) {
// Do some thing...
}
}
- For Install a virtual App, use this function:
VirtualCore.getCore().installApp({APK PATH}, flags);
- For Launch a virtual App, use this function:
VirtualCore.getCore().launchApp({PackageName});
- For uninstall a virtual App, use this function:
VirtualCore.getCore().uninstallApp({PackageName});
- If you need to get the
details of App
, use this function:
VirtualCore.getCore().findApp({PackageName});
VirtualApp 目前暂时没有文档,Please read the fucking source code。
LGPL 3.0
Lody ([email protected])