【Android 插件化】VirtualApp 安装并启动资源中自带的 APK 插件 ( 添加依赖库 | 准备插件 APK | 启动插件引擎 | 拷贝 APK 插件 | 安装插件 | 启动插件 )(一)

简介: 【Android 插件化】VirtualApp 安装并启动资源中自带的 APK 插件 ( 添加依赖库 | 准备插件 APK | 启动插件引擎 | 拷贝 APK 插件 | 安装插件 | 启动插件 )(一)

文章目录

前言

一、VirtualApp 安装并启动资源中自带的 APK 插件流程

1、依赖 VirtualApp 库

2、插件 APK 准备

3、启动插件引擎

4、拷贝 APK 到存储目录

5、安装插件

6、启动插件

二、完整源码

1、自定义 Application 源码

2、MainActivity 主界面源码

3、执行效果


前言

在 【Android 插件化】VirtualApp 接入 ( 在 VirtualApp 工程下创建 Module | 添加依赖 | 启动 VirtualApp 插件引擎 ) 和 【Android 插件化】VirtualApp 接入 ( 安装 APK 插件应用 | 启动插件 APK 应用 | MainActivity 安装启动插件完整代码 ) 博客中 , 简要介绍了应用接入 VirtualApp 的流程 ;


下面开始封装一个 APK 插件到应用中 , 并启动该 APK 插件 ;






一、VirtualApp 安装并启动资源中自带的 APK 插件流程



1、依赖 VirtualApp 库


工程中 , 添加 VirtualApp 的 依赖库 , 该依赖库是 Android Library 类型的 ;

image.png



在 Module 下的 build.gradle 中设置 VirtualApp 依赖库 依赖 ;


dependencies {
    implementation project(':lib')
}



2、插件 APK 准备


将插件 APK 文件 , 放置在 assets 资源目录下 ;

image.png




3、启动插件引擎


在自定义的 Application 中的 protected void attachBaseContext(Context base) 方法中 , 通过调用 VirtualCore.get().startup(base) 方法 , 启动插件化引擎 ;


public class VApp extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        try {
            VirtualCore.get().startup(base);
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }
}



4、拷贝 APK 到存储目录


将 VirtualApp\myapp\src\main\assets\app.apk 文件 , 拷贝到 /data/user/0/com.example.myapp/files/app.apk 位置 ;


之后可以加载 /data/user/0/com.example.myapp/files/app.apk 插件文件 ;


拷贝过程如下 :


 

/**
     * 将 VirtualApp\myapp\src\main\assets\app.apk 文件 ,
     * 拷贝到 /data/user/0/com.example.myapp/files/app.apk 位置
     */
    public void copyFile() {
        try {
            InputStream inputStream = getAssets().open("app.apk");
            FileOutputStream fileOutputStream = new FileOutputStream(new File(getFilesDir(), "app.apk"));
            byte[] buffer = new byte[1024 * 4];
            int readLen = 0;
            while ( (readLen = inputStream.read(buffer)) != -1 ) {
                fileOutputStream.write(buffer, 0, readLen);
            }
            inputStream.close();
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            Log.i("HSL", "文件拷贝完毕");
        }
    }


目录
相关文章
|
2月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
31 1
|
2月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
110 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
2月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
4月前
|
编解码 测试技术 Android开发
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
本文详细介绍了如何利用CameraX库实现高质量的照片及视频拍摄功能,包括添加依赖、初始化、权限请求、配置预览与捕获等关键步骤。此外,还特别针对不同分辨率和帧率的视频拍摄提供了性能优化策略,确保应用既高效又稳定。
406 1
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
|
4月前
|
监控 Java API
Android经典实战之OkDownload:一个经典强大的文件下载开源库,支持断点续传
本文介绍的 OkDownload 是一个专为 Android 设计的开源下载框架,支持多线程下载、断点续传和任务队列管理等功能,具备可靠性、灵活性和高性能特点。它提供了多种配置选项和监听器,便于开发者集成和扩展。尽管已多年未更新,但依然适用于大多数文件下载需求。
415 1
|
4月前
|
API Android开发
Android项目架构设计问题之选择和使用合适的UI库如何解决
Android项目架构设计问题之选择和使用合适的UI库如何解决
53 0
|
4月前
|
Android开发
解决android apk安装后出现2个相同的应用图标
解决android apk安装后出现2个相同的应用图标
378 2
|
4月前
|
测试技术 API Android开发
Android经典实战之简化 Android 相机开发:CameraX 库的全面解析
CameraX是Android Jetpack的一个组件,旨在简化相机应用开发,提供了易于使用的API并支持从Android 5.0(API级别21)起的设备。其主要特性包括广泛的设备兼容性、简洁的API、生命周期感知、简化实现及方便的集成与测试。通过简单的几个步骤即可实现如拍照、视频录制等功能。此外,还提供了最佳实践指导以确保应用的稳定性和性能。
105 0
|
4月前
|
Java Android开发 开发者
Android项目架构设计问题之使用Retrofit2作为网络库如何解决
Android项目架构设计问题之使用Retrofit2作为网络库如何解决
74 0
|
7月前
|
Android开发 开发者
Android Split APK介绍
【2月更文挑战第5天】