android 插件化 方案,Android应用开发之Android 插件化,qihoo360插件方案配置教程

本文将带你了解Android应用开发Android 插件化,qihoo360插件方案配置教程,希望本文对大家学Android有所帮助。

Android 插件化,qihoo360插件方案

目录

Android 插件化,qihoo360插件方案

宿主App插件化: 插件App插件配置: 宿主调用插件App:

新建一个项目,开始配置

宿主插件化配置:

在项目的根目录build.gradle中配置

classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.4'

在App module的build.gradle中引入

apply plugin: 'replugin-host-gradle'

其中repluginHostConfig 要看你是否使用AppCompat 来进行个性化配置

repluginHostConfig {

/**

* 是否使用 AppCompat 库

* 不需要个性化配置时,无需添加

*/

useAppCompat = true

}

3.添加依赖:

compile 'com.qihoo360.replugin:replugin-host-lib:2.2.4'

4.配置 Application 类

让工程的 Application 直接继承自 RePluginApplication。

如果您的工程已有Application类,则可以将基类切换到RePluginApplication即可。或者您也可以用“非继承式”接入。

public class MainApplication extends RePluginApplication {

}

既然声明了Application,自然还需要在AndroidManifest中配置这个Application。

备选:“非继承式”配置Application

若您的应用对Application类继承关系的修改有限制,或想自定义RePlugin加载过程(慎用!),则可以直接调用相关方法来使用RePlugin。

public class MainApplication extends Application {

@Override

protected void attachBaseContext(Context base) {

super.attachBaseContext(base);

RePlugin.App.attachBaseContext(this);

....

}

@Override

public void onCreate() {

super.onCreate();

RePlugin.App.onCreate();

....

}

@Override

public void onLowMemory() {

super.onLowMemory();

/* Not need to be called if your application's minSdkVersion > = 14 */

RePlugin.App.onLowMemory();

....

}

@Override

public void onTrimMemory(int level) {

super.onTrimMemory(level);

/* Not need to be called if your application's minSdkVersion > = 14 */

RePlugin.App.onTrimMemory(level);

....

}

@Override

public void onConfigurationChanged(Configuration config) {

super.onConfigurationChanged(config);

/* Not need to be called if your application's minSdkVersion > = 14 */

RePlugin.App.onConfigurationChanged(config);

....

}

}

针对“非继承式”的注意点

所有方法必须在UI线程来“同步”调用。切勿放到工作线程,或者通过post方法来执行 所有方法必须一一对应,例如 RePlugin.App.attachBaseContext 方法只在Application.attachBaseContext中调用 请将RePlugin.App的调用方法,放在“仅次于super.xxx()”方法的后面

插件App的配置:

在根目录下的build.gradle中添加依赖:

classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.4'

在App module中的builder.gradle中引入:

apply plugin: 'replugin-plugin-gradle'

添加dependencies依赖:

compile 'com.qihoo360.replugin:replugin-plugin-lib:2.2.4'

4.配置别名信息:

/*插件名配置*/

repluginPluginConfig {

//插件名

pluginName = "androidgo"

//宿主app的包名

hostApplicationId = "com.newdicooker.tempetek.hostreplugin"

//宿主app的启动activity

hostAppLauncherActivity = "com.newdicooker.tempetek.hostreplugin.MainActivity"

}

以上步骤完后才能就是见证奇迹的时刻了:

宿主调用插件App:

调用内置插件 调用外置插件

调用内置插件:

插件App生成apk,将APK改名为:[插件名].jar 将[插件名].jar放入主程序的Assets/plugins目录下 可通过别名:”

RePlugin.startActivity(MainActivity.this,

RePlugin.createIntent("androidgo", "com.newdicooker.tempetek.androidgo.MainActivity"));

androidgo:是插件App的别名

com.newdicooker.tempetek.androidgo.MainActivity:要启动App的启动页

可通过包名来进行访问:

RePlugin.startActivity(MainActivity.this,

RePlugin.createIntent("com.newdicooker.tempetek.androidgo", "com.newdicooker.tempetek.androidgo.MainActivity"));

调用外置插件:通过网络下载插件apk调用RePlugin.install(path)安装;

通过开启服务来进行异步下载任务的:

RePlugin.isPluginInstalled("image")是通过别名来判断插件是否安装,如果未安装则下载安装,如果已经安装则直接进入。

public void jumpToOut(View view) {

if (RePlugin.isPluginInstalled("image")) {

RePlugin.startActivity(MainActivity.this,

RePlugin.createIntent("image", "com.xq.imageplugindemo.MainActivity"));

return;

}

// 插件下载地址

String urlPath = "https://raw.githubusercontent.com/ZhangZeQiao/ImagePluginDemo/7c5866db83b57c455302fac12ea72af30d9a5364/app/src/main/assets/image.apk";

// 插件下载后的存放路径

String downloadDir = Environment.getExternalStorageDirectory().getAbsolutePath();

Intent intent = new Intent(this, DownloadAndUpdateService.class);

intent.putExtra("urlPath", urlPath);

intent.putExtra("downloadDir", downloadDir);

startService(intent);

}

下载安装:

public class DownloadAndUpdateService extends IntentService {

public DownloadAndUpdateService() {

// 实现父类的构造方法,用于命名工作线程,只用于调试。

super("DownloadAndUpdateService");

}

@Override

protected void onHandleIntent(@Nullable Intent intent) {

// Intent是从Activity发过来的,携带识别参数,根据参数不同执行不同的任务

// 插件下载地址

String urlPath = intent.getStringExtra("urlPath");

// 插件下载后的存放路径

String downloadDir = intent.getStringExtra("downloadDir");

File file = null;

try {

// 统一资源

URL url = new URL(urlPath);

// 连接类的父类,抽象类

URLConnection urlConnection = url.openConnection();

// http的连接类

HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;

// 设定请求的方法,默认是GET

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值