【Android 插件化】VirtualApp 源码分析 ( 安装应用源码分析 | HomePresenterImpl 添加应用 | AppRepository.addVirtualApp )
文章目錄
- 一、安裝應(yīng)用源碼分析
- 1、HomePresenterImpl 添加應(yīng)用
- 2、AppRepository.addVirtualApp 安裝 SD 卡 APK 應(yīng)用
一、安裝應(yīng)用源碼分析
1、HomePresenterImpl 添加應(yīng)用
mPresenter.addApp(info); 實(shí)際上調(diào)用的是 io.virtualapp.home.HomePresenterImpl 類的 addApp() 方法 , 安裝應(yīng)用 , 傳入 AppInfoLite info 參數(shù) , 封裝如下值 :
packageName : com.example.filepath , path : /storage/emulated/0/./app-debug.apk , fastOpen : false通過(guò) VirtualCore.get().getInstalledAppInfo(info.packageName, 0); 代碼 , 獲取該應(yīng)用是否安裝過(guò) ,
- 如果應(yīng)用安裝過(guò) , 則該安裝操作是克隆應(yīng)用 ;
- 如果應(yīng)用沒(méi)有安裝過(guò) , 則該安裝操作是從 SD 卡安裝 ; 如果是從 SD 卡安裝 , 則調(diào)用 InstallResult res = mRepo.addVirtualApp(info); 進(jìn)行安裝操作 ;
2、AppRepository.addVirtualApp 安裝 SD 卡 APK 應(yīng)用
InstallResult res = mRepo.addVirtualApp(info); 方法調(diào)用的是 AppRepository 類的 addVirtualApp 方法 ;
public class AppRepository implements AppDataSource {@Overridepublic InstallResult addVirtualApp(AppInfoLite info) {// int COMPARE_VERSION = 0X01 << 3;// int SKIP_DEX_OPT = 0x01 << 6;int flags = InstallStrategy.COMPARE_VERSION | InstallStrategy.SKIP_DEX_OPT;// fastOpen 值是 false , 該分支沒(méi)有命中if (info.fastOpen) {flags |= InstallStrategy.DEPEND_SYSTEM_IF_EXIST;}// 安裝 SD 卡中的 APK 文件return VirtualCore.get().installPackage(info.path, flags);} }原始數(shù)據(jù) AppInfoLite info 如下 :
I/HSL: packageName : com.example.filepath , path : /storage/emulated/0/./app-debug.apk , fastOpen : false此處找到了可以直接調(diào)用的 API 方法 , 調(diào)用 VirtualCore.get().installPackage( SD卡絕對(duì)路徑 , 0X01 << 3 | 0x01 << 6); API 安裝某個(gè)路徑中中的 APK 文件 ;
flags 值參考 : 0X01 << 3 | 0x01 << 6 ;
// int COMPARE_VERSION = 0X01 << 3;// int SKIP_DEX_OPT = 0x01 << 6;int flags = InstallStrategy.COMPARE_VERSION | InstallStrategy.SKIP_DEX_OPT;InstallStrategy 常量類定義 :
public interface InstallStrategy {int TERMINATE_IF_EXIST = 0x01 << 1;int UPDATE_IF_EXIST = 0x01 << 2;int COMPARE_VERSION = 0X01 << 3;int IGNORE_NEW_VERSION = 0x01 << 4;int DEPEND_SYSTEM_IF_EXIST = 0x01 << 5;int SKIP_DEX_OPT = 0x01 << 6; }總結(jié)
以上是生活随笔為你收集整理的【Android 插件化】VirtualApp 源码分析 ( 安装应用源码分析 | HomePresenterImpl 添加应用 | AppRepository.addVirtualApp )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Android 插件化】Virtual
- 下一篇: 【Android 插件化】Virtual