Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )相关的知识,希望对你有一定的参考价值。
一、目前的 API 现状
下图是 VirtualApp 官方给出的集成 VirtualApp 的步骤 , 这个 API 目前跑不通 , 应该是最新的商业版的使用 API ;
当前的开放源码是 2017 年底的源码 , 好在源码 , 可以从源码中查找 API ;
二、安装应用源码分析
1、安装按钮执行的操作
在安装应用界面中的 手机内存 界面中 , 选中要安装的应用 , 点击 " 安装 " 按钮 , 即可安装该应用到 VirtualApp 插件化引擎中 ;
到字符串资源中 , 找 " 安装 " 字符串 ;
查找到在 io.virtualapp.home.ListAppFragment
页面中 , mInstallButton
就是要安装应用的按钮 , 其点击方法在后面的代码中 , 在后续的点击方法中 , 传入了一个 Lambda 表达式 , 获取了若干应用信息 AppInfoLite 对象 , 将该对象返回给 HomeActivity ;
这里 getActivity().setResult
返回到上一个界面 , 带着数据进入到上一个界面 , 也就是 HomeActivity 的
public class ListAppFragment extends VFragment<ListAppContract.ListAppPresenter> implements ListAppContract.ListAppView {
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
mAdapter.setSelectionListener(count -> {
mInstallButton.setEnabled(count > 0);
mInstallButton.setText(String.format(Locale.ENGLISH, getResources().getString(R.string.install_d), count));
});
mInstallButton.setOnClickListener(v -> {
Integer[] selectedIndices = mAdapter.getSelectedIndices();
ArrayList<AppInfoLite> dataList = new ArrayList<AppInfoLite>(selectedIndices.length);
for (int index : selectedIndices) {
AppInfo info = mAdapter.getItem(index);
dataList.add(new AppInfoLite(info.packageName, info.path, info.fastOpen));
Log.i("HSL", "packageName : " + info.packageName + " , path : " + info.path + " , fastOpen : " + info.fastOpen);
}
Intent data = new Intent();
data.putParcelableArrayListExtra(VCommends.EXTRA_APP_INFO_LIST, dataList);
getActivity().setResult(Activity.RESULT_OK, data);
getActivity().finish();
});
}
}
使用
Log.i("HSL", "packageName : " + info.packageName + " , path : " + info.path + " , fastOpen : " + info.fastOpen);
代码 , 拦截一下数据 , 查看下传入的是什么参数 :
I/HSL: packageName : com.example.filepath , path : /storage/emulated/0/./app-debug.apk , fastOpen : false
在 adb shell 中查看 , 该应用在 SD 卡根目录 ;
2、返回到 HomeActivity 执行的操作
使用的 MVP 模式 ;
返回的时候 , 获取到 AppInfoLite 集合 , 逐个遍历安装应用 ;
mPresenter.addApp(info);
实际上调用的是 io.virtualapp.home.HomePresenterImpl
类的 addApp()
方法
public class HomeActivity extends VActivity implements HomeContract.HomeView {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && data != null) {
List<AppInfoLite> appList = data.getParcelableArrayListExtra(VCommends.EXTRA_APP_INFO_LIST);
if (appList != null) {
for (AppInfoLite info : appList) {
mPresenter.addApp(info);
}
}
}
}
}
以上是关于Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )的主要内容,如果未能解决你的问题,请参考以下文章
Android 插件化VirtualApp 源码分析 ( 安装应用源码分析 | HomePresenterImpl 添加应用 | AppRepository.addVirtualApp )
Android 插件化VirtualApp 源码分析 ( 安装应用源码分析 | HomePresenterImpl 添加应用 | AppRepository.addVirtualApp )
Android 插件化VirtualApp 接入 ( 在 VirtualApp 工程下创建 Module | 添加依赖 | 启动 VirtualApp 插件引擎 )
Android 插件化VirtualApp 接入 ( 在 VirtualApp 工程下创建 Module | 添加依赖 | 启动 VirtualApp 插件引擎 )
Android 插件化VirtualApp 安装并启动资源中自带的 APK 插件 ( 添加依赖库 | 准备插件 APK | 启动插件引擎 | 拷贝 APK 插件 | 安装插件 | 启动插件 )(代码片
Android 插件化VirtualApp 安装并启动资源中自带的 APK 插件 ( 添加依赖库 | 准备插件 APK | 启动插件引擎 | 拷贝 APK 插件 | 安装插件 | 启动插件 )(代码片