# SpaceCore **Repository Path**: alwaysal/SpaceCore ## Basic Information - **Project Name**: SpaceCore - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-06 - **Last Updated**: 2023-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SpaceCore SpaceCore是一个基于Android系统的应用程序虚拟化引擎,一个Android系统的沙盒环境,亦可看作是轻量级的Android虚拟机。可用于APP多开、数据隔离、脚本自动化、插件化开发、谷歌商店上架等。 官网:[https://spacecore.dev](https://spacecore.dev) Telegram:[@android_spacecore](https://t.me/android_spacecore)
# Google Play商店上架 如果您需要将其用于 Google Play商店上架,请不要使用公共版本的 SDK,否则会导致账户被封。 请联系 Telegram:[@Samuel](https://t.me/samuel_last_for_long) 或发送电子邮件至 support@spacecore.dev 以获取 Google Play 专用版本。
## 使用说明 ##### SpaceCore SDK * SpaceCore SDK 为免费产品,**非开源**,您可以自由使用而无须通知本作者,亦可作为商业用途使用 [SpaceCore SDK 下载](https://github.com/FSpaceCore/SpaceCore/releases) * **如有定制需求,请联系** [support@spacecore.dev](mailto:support@spacecore.dev) ##### SpaceCore Demo * SpaceCore Demo 用于演示SpaceCore SDK的使用方式,即本仓库中的代码 [SpaceCore Demo Release 下载](https://github.com/FSpaceCore/SpaceCore/releases) ## 兼容性 | | 兼容性 | |---------------------|----------------------------------| | ABIs | `armeabi-v7a / arm64-v8a` | | Android version | `6.0 ~ 14.0 及后续版本持续兼容更新` | ## 集成SDK ### Step 1. 依赖引用 版本根据主工程版本即可,如主工程未添加依赖则需要添加以下依赖 ``` implementation "com.tencent:mmkv-static:1.2.10" implementation "com.google.code.gson:gson:2.9.1" ``` 如果主工程未使用kotlin,需要额外引入 ``` implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.30" ```
### Step 2 初始化,在Application#attachBaseContext中加入以下代码初始化 ```java FCore.get().init(this); ``` 请注意,在调用init之后,若FCore.get().isClient()条件成立,请尽量不要在Application中做其他事情的初始化,如遇到问题,请联系技术人员。 ```kotlin override fun attachBaseContext(base: Context) { super.attachBaseContext(base) FCore.get().init(this) // 允许与系统交互 FCore.get().setAllowSystemInteraction(true) // 允许智能预加载 FCore.get().setAutoPreloadApplication(true) // ..... if(FCore.isClient()) { return } // do .... } override fun onCreate() { super.onCreate() if(FCore.isClient()) { return } // do .... } ```
### Step 3. 安装 ##### 克隆APP 此方式会依赖系统已安装应用,如果系统上的应用卸载,那么空间内应用也会跟随消失 ```java FCore.get().installPackageAsUser("包名", USER_ID) ``` ##### 免安装运行 此方式支持免安装,不会受系统安装卸载影响。 ```java FCore.get().installPackageAsUser(new File("/sdcard/wechat.apk"), USER_ID) ``` ### Step 4. 启动沙盒应用 ```java FCore.get().launchApk("包名", USER_ID) ```
## 接口文档 方法 | 描述 | en ---|--- | --- init | 初始化内核,请在Application#attachBaseContext调用 | Initialize sandbox | isInstalled | 沙盒内是否已安装 | Check if the app is installed in the sandbox | installPackageAsUser | 提供包名克隆应用到沙盒 | Clone App into sandbox according to package name| installPackageAsUser | 提供File安装应用到沙盒 | Clone App into sandbox via apk file| uninstallPackage | 卸载沙盒中所有用户已安装的某个应用 | Uninstall an App installed in the sandbox globally | uninstallPackageAsUser | 卸载某个用户的应用 | Uninstall an App installed in the sandbox by user| getInstalledApplications | 获取已安装在沙盒內的应用 | Get all applications installed in the sandbox| getApplicationInfo | 获取沙盒內某个应用的ApplicationInfo | Get application info of an App in the sandbox| getPackageInfo | 获取沙盒內某个应用的PackageInfo | Get package info of an application in the sandbox| getLaunchIntentForPackage | 获取应用Launcher Intent | Get LauncherIntent of an App | launchApk | 启动沙盒应用 | Launch App in sandbox | launchIntent | 通过Intent启动应用 | Launch App via Intent | isRunning | 判断某个应用是否正在运行 | Check if an App is running | clearPackage | 清除沙盒APK数据 | Clear App data | stopPackage | 停止某个应用运行 | Stop an app from running| stopAllPackages | 停止所有正在运行的应用 | Stop all running applications| setApplicationCallback | 注册应用Application启动回调 | | preloadApplication | launchApk时间较长,可以使用此方法阻塞加载,加载成功后再launchApk。期间可以自己做动画或者等待启动的事件 setAutoForeground | 设置自动启动/关闭通知栏,当没有进程活跃时自动关闭通知栏 ### 内部进程: 方法 | 描述 | en ---|--- | --- findProcessRecord | 寻找进程信息 addProcessMonitor | 添加沙盒内部进程监听 removeProcessMonitor | 移除沙盒内部进程监听 ### 内核用户: 方法 | 描述 | en ---|--- | --- getUsers | 获取沙盒中的用户 createUser | 创建沙盒中的用户 deleteUser | 删除沙盒中的用户(所有应用信息将被删除) ### 应用数据: 方法 | 描述 | en ---|--- | --- exportAppData | 导出某个应用的所有数据 importAppData | 导入某个应用的所有数据 ### 应用规则: 方法 | 描述 | en ---|--- | --- addRule| 加入一份配置规则 setAllowSystemInteraction | 当沙盒查找不到广播、Activity等时,是否允与系统应用交互 setHideRoot | 隐藏Root setHideSim | 隐藏SIM卡状态 setHideVPN | 隐藏VPN状态 setVisitExternalApp | 沙盒內应用可感知外部应用 setDisableKill | 防止应用闪退 setDisableNetwork | 禁用应用网络 setHidePath | 隐藏多开路径、存储路径 getSpaceLanguage | 获取某个空间的模拟语言 setSpaceLanguage | 设置某个空间的模拟语言(中国:zh) getSpaceRegion | 获取某个空间的模拟地区 setSpaceRegion | 设置某个空间的模拟地区(中国:CN) getSpaceTimeZone | 获取某个空间的模拟时区 setSpaceTimeZone | 设置某个空间的模拟时区(上海:Asia/Shanghai) ### 应用权限: 方法 | 描述 | en ---|--- | --- getPermission | 获取应用权限规则 updatePermission | 更新应用权限规则 revokePermission | 移除应用权限规则(应用将跟随宿主实际权限) ### 内核配置: 方法 | 描述 | en ---|--- | --- enableOptRule | 是否启用规则屏蔽推送、三方sdk、热更新、广告等,优化应用运行速度,如遇到应用异常,请关闭 setAutoPreloadApplication | 智能预加载应用,内核自动根据应用使用情况主动加载应用,加快启动速度,默认:开 preloadApplicationCount | 默认预加载应用数量,默认:2 setPreloadProcessCount | 设置预加载进程数量,加快应用启动速度,默认:3 setBackToHome | 当沙盒应用退出时是否返回宿主 setSpaceTaskDescriptionPrefix | 设置最近任务栏的应用前缀(默认:F{用户ID}) setEnableLauncherView | 是否启用 应用启动图 restartCoreSystem | 重启内核(所有应用将会杀死) ## 规则配置系统 在面对各种应用时,支持配置不同的运行时参数,虚拟机参数来达到适配,SpaceCore支持强大的规则配置系统,能对每个应用定制专属的规则,可以通过云配置方式,动态更新规则库。规则支持的功能正在逐步开发。 ```java PackageRule.Builder builder = new PackageRule.Builder("com.tencent.mm", /*作用域进程,如果所有进程则留空*/ "com.tencent.mm", "com.tencent.mm:tools", "com.tencent.mm:appbrand1", "com.tencent.mm:appbrand2") // 禁用某个Activity .addBlackActivity("com.tencent.mm.plugin.base.stub.WXEntryActivity") // 禁用某个广播 .addBlackBroadcast("com.tencent.mm.plugin.appbrand.task.AppBrandTaskPreloadReceiver") // 禁用某个服务 .addBlackService("com.tencent.mm.plugin.backup.backuppcmodel.BackupPcService") // 禁用某个ContentProvider .addBlackContentProvider("androidx.startup.InitializationProvider") // 预加载进程,可预先启动某个进程 加快运行时体验速度。 .addPreloadProcessName("com.tencent.mm:appbrand1") // 禁止某个进程启动 .addBlackProcessName("com.tencent.mm:appbrand2") // 禁止访问某文件 .addBlackIO("/proc/self/maps") // 重定向某文件 .addRedirectIO("/proc/self/cmdline", "/proc/self/fake-cmdline") // 隐藏Root .isHideRoot(true) // 隐藏Sim .isHideSim(true) // 隐藏VPN .isHideVpn(true) // 许多等等.... // 设置环境语言 .setLanguage("zh") // 设置当前所在区域 .setRegion("CN") // 设置当前时区 .setTimeZone("Asia/Shanghai"); PackageRule build = builder.build(); // 加入单条规则 FCore.get().addRule(build); // 如果多条规则请放入FRule FRule fRule = new FRule(builder.build(), builder.build(), builder.build()); FCore.get().addFRule(fRule); // 可云下发配置内容 String json = new Gson().toJson(fRule); // 客户端加载云下发json FCore.get().addFRuleContent(json); ```