一、 简介
“卓易通”是一款专为鸿蒙系统设计的应用程序,其核心功能是为用户提供一个能够安装并运行安卓应用的虚拟环境。随着华为推出完全移除安卓AOSP(Android Open Source Project)代码的HarmonyOS Next版本(常被称为“纯血鸿蒙”),系统本身不再兼容安卓应用。
“卓易通”的出现,解决了HarmonyOS Next用户在过渡时期仍需使用部分安卓生态应用的需求。用户可以在华为应用市场下载并安装“卓易通”,然后通过这个应用来间接安装和使用安卓APK文件。
二、 技术实现方案
“卓易通”的技术核心是 安卓虚拟机(Android Virtual Machine) 方案。
其基本原理如下:
- 虚拟化技术:“卓易通”并非一个简单的兼容层或API转译工具,而是在鸿蒙内核之上,通过虚拟化技术构建了一个完整的、独立的安卓运行时环境。
- 独立运行空间:这个虚拟环境模拟了安卓系统所需的硬件和软件环境,使得安卓应用感觉自己正运行在一个标准的安卓设备上。应用的所有进程和数据都封装在这个虚拟空间内,与外部的鸿蒙系统相对隔离。
- 绕过系统限制:通过创建这样一个“沙盒”化的安卓系统,卓易通成功绕过了HarmonyOS Next底层不再支持APK的限制。从鸿蒙系统的角度来看,它只是在运行一个名为“卓易通”的普通鸿蒙应用;而对于运行在“卓易通”内部的安卓应用来说,它们则处在一个熟悉的安卓环境中。
简单来说,可以将其理解为在鸿蒙系统上运行的一个“安卓模拟器”,类似于在Windows电脑上通过VMware或VirtualBox运行一个完整的Linux系统。这种方案保证了较高的兼容性,但通常也会带来一定的性能开销。
三、识别卓易通环境
目前测试通过Build.MANUFACTURER、Build.BRAND、Build.MODEL均无法识别出卓易通环境,但由于相关应用基本都是通过“卓易通”内置的应用商店安装的,那么它的“安装来源”就会被记录为该商店的包名。我们可以通过 PackageManager API 获取这个信息。
示例代码 (Kotlin)
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
/**
* 通过检查应用的安装来源来判断是否为卓易通环境。
*/
fun isInstalledByZhuoyi(context: Context?): Boolean {
if (context == null) return false
// 卓易通内置应用商店的包名(根据提供的信息)
val ZHUOYI_INSTALLER_PACKAGE = "com.zhuoyi.appstore.lite"
return try {
val pm = context.packageManager
val packageName = context.packageName
// 兼容新旧安卓版本的API
val installerPackageName = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
pm.getInstallSourceInfo(packageName).installingPackageName
} else {
@Suppress("DEPRECATION")
pm.getInstallerPackageName(packageName)
}
// Log.d("EnvCheck", "Installer Package Name: $installerPackageName")
ZHUOYI_INSTALLER_PACKAGE == installerPackageName
} catch (e: Exception) {
// 发生异常时,保守返回false
e.printStackTrace()
false
}
}