超简单一行代码实现应用双开,仿照微信双开、QQ双开等实现app应用双开,即采用Android插件化开发在免安装情况下加载使用原生app
超简单一行代码实现应用双开,仿照微信双开、QQ双开等实现app应用双开,即采用Android插件化开发在免安装情况下加载使用原生app
LoadApp
仿照微信双开、QQ双开等实现app应用双开,即在免安装情况下加载使用原生app,采用仿支付宝加载应用和微信加载小程序的功能特色,实现应用免安装情况下运行。
本项目主要采用插件化开发技术,在一个容器app中,把其它的app以文件流的形式进行加载,利用反射等方法获得相关的程序入口,进行加载和使用。
加载app的方法都封装了需要参数,根据方法名结合自身需要传输的参数即可了解需要使用的方法,只需要一行代码进行调用和实现。
官网地址
其它信息
源码地址
最新版本
版本号:
使用自行替换下面的版本号,以获得最新版本。
使用体验
1、首先下载容器app,也是主app,这个app可以独立运行,也就是普通的app应用程序,需要下载并安装,下载地址:
https://github.com/YouAreOnlyOne/LoadApp/blob/master/source/loadapp.apk。
安装之后,直接运行,但是只有简单的HelloWorld界面,点击“加载APP”也不会有什么反应,不能够跳转到其它的app,会提示“文件是否存在”。
2、下载另一个需要的app,这个app也可以独立安装,也是一个普通的app应用程序,可以安装也可以不安装(实现双开效果需要安装),但是要把安装包(apk文件)放到手机存储的根目录下面,下载地址:
https://github.com/YouAreOnlyOne/LoadApp/blob/master/source/develop.apk 。
此时,重新进入主app,点击“加载APP”,就会把这个这一步下载的app加载进去。实现免安装使用。我们我们加载的这个app也是一个独立app,可以进行安装,安装之后就会达到容器里面加载了这个app,本身这个app又可以安装使用,达到应用双开的效果。
使用方法
这里分别介绍在不同项目环境中,如何引用对该库的依赖。
Android中使用:
方法一:
1.第一步,在项目的build.gradle下配置,注意是项目的build.gradle:
allprojects {repositories {...maven { url 'https://www.jitpack.io' }}
}
2.第二步,在app的build.gradle下添加如下依赖:
dependencies {...implementation 'com.github.YouAreOnlyOne:LoadApp:版本号'...}
方法二:
1.第一步,下载依赖的包:
https://github.com/YouAreOnlyOne/LoadApp/blob/master/source/standard-release.aar 。
https://github.com/YouAreOnlyOne/LoadApp/blob/master/source/develop-release.aar 。
https://github.com/YouAreOnlyOne/LoadApp/blob/master/source/app-release.aar 。
并放到项目的 libs 目录下面。
2.第二步,在app的build.gradle下添加如下依赖,注意,两个依赖是平级关系:
repositories {flatDir {dirs 'libs'}
}dependencies {...compile(name:'standard-release', ext:'aar')compile(name:'develop-release', ext:'aar')compile(name:'app-release', ext:'aar')...
}
使用示例:
创建容器APP
1、Android环境中随便新建一个普通Android项目(注意添加上面的依赖),在任何一个Activity中,调用下面一行代码即可:
LoadApp.loadApp(this,new File("app文件的路径"));
创建其它APP
1、Android环境中随便新建一个普通Android项目(注意添加上面的依赖),新建一个Activity,这个Activity需要继承框架的BaseActivity,该Activity中的所有的上下文环境的this全部用that代替即可,其它没有任何要求,跟普通app开发完全一样。例如下面简单的demo:
public class MainActivity extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);that.findViewById(R.id.textView).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(that,"点击事件成功!",Toast.LENGTH_LONG).show();Intent intent=new Intent(that,SecondActivity.class);startActivity(intent);}});}
}
2、编译该应用程序,生成apk。把生成的apk放到手机存储卡里面,或者服务器上面。
3、上面容器APP中,可以读取手机存储卡里面的app文件,也可以从服务器先下载到本地,然后再读取。总之只要活得需要加载的APP的文件路径就可以了。
项目用到的权限
在manifest文件中添加访问的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
使用指南
更新中……
相关介绍
OkHttp 、Retrofit 、Volley 、RxJava、Novate在Android中Web网络请求一行代码解决。
https://blog.csdn.net/u014374009/article/details/82933127
一行代码实现Ftp文件上传、文件下载、文件删除和进度监听的工具类的使用。
https://blog.csdn.net/u014374009/article/details/82944107
一行代码解决AndFix热修复和热跟更新问题,集成了阿里的开源库,修复程序的缺陷bug漏洞和功能页面等.
https://blog.csdn.net/u014374009/article/details/83052178
其它信息
1.项目还有很多不完善的地方,欢迎大家指导。
2.项目持续更新开源,有兴趣加入项目或者跟随项目的伙伴,可以邮件联系!
3.关注或者喜欢或者尝试使用或者感兴趣的伙伴可以,点击 ~ follow、fork、star ~ 。
作者邮箱
ycj52011@outlook.com
超简单一行代码实现应用双开,仿照微信双开、QQ双开等实现app应用双开,即采用Android插件化开发在免安装情况下加载使用原生app相关推荐
- Android 插件化开发——宿主APP加载APK插件
本篇博客说一下我们的宿主APP怎样加载别的APK文件. 首先需要说一些知识点,我们的Java文件要想在Android环境运行,需要将.java文件通过转为class文件,然后为了能在DVM上面运行,再 ...
- 【Android 插件化】VirtualApp 接入 ( 安装 APK 插件应用 | 启动插件 APK 应用 | MainActivity 安装启动插件完整代码 )
文章目录 一.安装 APK 插件应用 二.启动插件 APK 应用 三.MainActivity 完整代码 四.博客源码 一.安装 APK 插件应用 调用 VirtualCore.get().insta ...
- Android插件化开发基础之App如何动态加载类
在 Java 里面,我们可以把一些类放到 .jar 文件里面,然后用 ClassLoader 动态加载.例如: URLClassLoader ucl = URLClassLoader.newInsta ...
- Android插件化开发基础之Java动态代理(proxy)机制的简单例子
一.代码 package com.sangfor.tree;import java.lang.reflect.InvocationHandler; import java.lang.reflect.M ...
- Android插件化开发之用DexClassLoader加载未安装的APK资源文件来实现app切换背景皮肤
第一步.先制做一个有我们需要的图片资源的APK 如下图,这里有个about_log.png,我们需要生成apk文件. 生成的apk文件如果你不到项目的文件夹里面去取apk,想通过命令放到手机里面去可以 ...
- Android插件化——加载其他APP页面
Android插件化--加载其他APP页面 1.分析 2.优点 3.详细过程 3.1 标准化加载接口 3.2待加载的APP-B 3.3 APP-A 主加载工程 3.3.1 加载工具类PlugManag ...
- android扫码 超简单零代码
android扫码 超简单零代码 小序 背景介绍 前期准备 zxing和华为扫码服务对比 开始搬运 结语 小序 这是一篇纯新手教学,本人之前没有任何安卓开发经验(尴尬),本文也不涉及任何代码就可以使用 ...
- Android 插件化原理(一),通过dex文件调用插件app代码
Android插件化原理,从以下三个问题切入: 什么是插件化 如何实现插件类的加载 如何实现插件资源的加载 什么是插件化 插件化技术最初是源于免安装运行APK的想法,这个免安装的APK就可以理解为插件 ...
- gradle打成jar包报错 错误: 找不到或无法加载主类 App(已经配置过主类)
文章目录 将gradle打成jar包(包括依赖) 运行jar包 报错 原因(src自己手动创建的) 解决(添加src目录) 将gradle打成jar包(包括依赖) jar {manifest {att ...
- Android 插件化,qihoo360插件方案。集成简单实用方便,兼容性高
Android 插件化,qihoo360插件方案 目录 Android 插件化,qihoo360插件方案 宿主App插件化: 插件App插件配置: 宿主调用插件App: 新建一个项目,开始配置 宿主插 ...
最新文章
- 内核同步机制——互斥量
- php自动停止原因,解析mysql自动停止服务解决办法
- Redis 与 MQ 的区别
- extent static const
- 概率论-2.1 随机变量及其分布(重点:右连续的来源)
- telnet/ftp/netstat/ping命令詳細介紹
- Android运行Socket项目时出现错误 Error: ShouldNotReachHere()
- 小米mysql安装教程_小米 SOAR 开源SQL优化工具安装
- freemarker【FTL】常见语法大全
- MATLAB绘图函数plot详解
- 自媒体文章原创度检测,提高文章通过率!
- uniapp:微信小程序地图功能
- 如何提高测试工作效率
- [物联网+云存储]-关于人工智能开关的学习思路
- win服务器系统设置休眠时间,win7系统电脑设置休眠时间的操作方法
- Apache Pulsar 生态项目 AoP 新增两位中国移动 Maintainer!
- 采用Resnet做UC Merced Land Use Dataset数据分类
- 如何取得从1970年1月1日0时0分0秒到现在的毫秒数?
- python发送短信验证码_python发送短信验证码
- 几个高质量无版权图库,还愁找不到配图?
热门文章
- 又到一年清明时,又是一年踏春季
- Fundamentals Of Computer Graphics (4th Ed)
- Go 为什么选择 Gopher 作为吉祥物?
- 解决Elasticsearch集群 master_not_discovered_exception 异常
- 虚拟机安装win7 64位教程
- 冰点还原忘记密码如何修改配置或卸载
- 裤子尺码对照表eur40_裤子尺寸对照表,衣服尺寸对照表,服装尺寸对照表 - 尺码对照表...
- 获取 IE 浏览器版本以及判断是否开启 cookie
- kubernets nodeport 无法访问
- python出现syntaxerror_python 报错syntaxerror怎么解决