【Android 插件化】VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )
文章目錄
- 一、目前的 API 現狀
- 二、安裝應用源碼分析
- 1、安裝按鈕執行的操作
- 2、返回到 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 {@Overridepublic 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 {@Overrideprotected 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 插件化】Virtual
- 下一篇: 【Android 插件化】Virtual