android插件化开发

Android 插件化开发(四)—— LoadApk方式插件化开发 插件化开发的第三种方法,其实是在第二种Hook式方法上继续改进,因为第二种hook式存在一个问题,那就是第三步中将多个apk插件进行加载,导致dexElements会很大,占用内存比较大,很有可能当插件很多时候,直接oom,因此产生了一种新的方法,就是讲LoadApk进行扩展,当加载插件时候,使用插件的LoadApk,这样就不会产生占很大内存的dexElements了。 下面是步骤: 1、绕过AMS检测,使用ProxyActivity替换PluginActivity 2、将ProxyActivity换回Pl 阅读详情

这里主要讲2中插件化开发,远程加载jar和加载从远程下载的apk文件(不需要安装)

1、加载远程jar包。
测试条件:
1. 自己制作一个jar包:testJar.jar;
2. 将jar放在libs目录下,实际的情况是从远程端下载一个jar.

加载代码:

            URL[] urls=new URL[]{new URL("file:libs/testJar.jar")};
            URLClassLoader urlClassLoader=new URLClassLoader(urls,getClassLoader());
            Class test=urlClassLoader.loadClass("com.liudong.text.TestUtils");
            Object object=test.newInstance();
            Method method=test.getDeclaredMethod("printTest");
            method.invoke(object);

这样就加载完毕了。

2、加载远程apk文件
测试条件:

  1. 先制作一个插件app,pluginApp.apk
  2. 建立一个主app
  3. 将pluginAPP.apk放置在主app的assert目录下

加载代码:
参考这篇文章:http://www.jianshu.com/p/01a91a9b7a19;注意该篇文章仅仅在android4.3 上测试成功,android4.4 和 6.0 均未成功。

Android插件化开发 阅读详情

相关推荐

全面解析Android插件化开发实战技巧

随着移动应用的不断增长和更新,传统的应用开发模式已难以应对快速迭代和灵活扩展的需求。在这种背景下,Android插件化开发应运而生,它允许应用开发者在不修改主应用的情况下,动态地添加、更新和管理应用的功能模块。插件化库在Android插件化开发中扮演着至关重要的角色,它们是抽象和封装了插件化机制底层细节的工具,使开发者能够更加聚焦于应用逻辑的实现,而不是处理繁琐的插件管理问题。插件化库可以大致分为三类:类加载器类库:负责处理插件Dex的加载,包括和。

weixin_42575505的博客 1202

android jar包插件化以及远程更新jar包思路

首先介绍一下要实现的效果:静默更新所有客户端应用程序中的jar包。 产生这个需求的原因:当做好的jar包发布出去,开发者已经在使用的情况下,有一天我们发现jar包中有个bug,这是我们就要去更新jar包,但是如果开发者需要更新jar包的话,那代价无疑是巨大的。出于减少开发者更新jar包的代价的目的。我们想到了使用这种方式来解决。整个项目的结构如下图: 插件管理框架工作流程: 客户端a

格物穷理 5203

DL-FWI基础入门培训视频学习1、2

DL-FWI基础知识

shengMio的博客 709

Android应用插件化开发

在android的项目开发中,都会遇到后期功能拓展(增强)与主程序代码变更的现实矛盾。随着移动APP的版本迭代,仅仅满足基本功能的APP,在发展路径上多少都会受挫,而提供更多的增强功能又会让APP变得臃肿。怎样平衡用户的需求与APP的臃肿度呢?一个简单的办法就是打造APP插件化,给瘦APP增肥,给胖APP瘦身,而这一切,都是根据用户的需求进行的选择。

saroll57的专栏 1902

如何用capl操控程控电源(RS232)

capl脚本操控RS232

xiaohuanxiong_的博客 3991

我用 AI 做了个开源地图工具:从 OpenStreetMap 一键获取全国 AOI/POI 数据

本文介绍了一款免费开源的OSM数据查询与可视化工具,旨在解决Overpass QL语法晦涩、数据获取门槛高的问题。工具支持面数据(AOI)、点数据(POI)及路网三种查询模式,内置30+常用模板实现一键检索。具备高德与OSM双底图切换、坐标自动转换功能,支持GeoJSON、SHP、CSV多格式导出,同时保留自定义查询能力。作为纯HTML单文件应用,可零成本部署至GitHub Pages在线使用。该工具有效降低了地理数据获取难度,是替代商业地图API、高效提取全球开源地理信息的实用利器。

weixin_45812624的博客 586

Android组件化和插件化开发,安卓开发毕业设计题目

*要想成为高级安卓工程师,必须掌握许多基础的知识。**在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。Android架构视频+BAT面试专题PDF+学习笔记即可获取!Android架构视频+BAT面试专题PDF+学习笔记即可获取!

m0_61549953的博客 953

QT与Coin3D实现机器人的仿真

前言 Coin3D编程环境配置好后,开始下一步的机器人仿真任务。本文根据在研5轴机器人,完成三维模型生成与机器人的仿真。主要参考博主冯Jungle的博客,在此表示感谢。 ——2021.05.23 环境 Win10:VS2019、QT5.15.2、Coin3D、SolidWorks2016 机器人三维模型生成 目前广泛应用于因特网的VRML ( Virtual Reality Modeling Language,虚拟现实建模语言)为用户提供一种可参与的、并能对场景中对象主动做出反应的虚拟现实环境,现已成

焦露的博客 6907

Android组件化和插件化开发

由于本文罗列的知识点是根据我自身总结出来的,并且由于本人水平有限,无法全部提及,欢迎大神们能补充~将来我会对上面的知识点一个一个深入学习,也希望有童鞋跟我一起学习,一起进阶。提升架构认知不是一蹴而就的,它离不开刻意学习和思考。**这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家,**梳理了多年的架构经验,筹备近1个月最新录制的,相信这份视频能给你带来不一样的启发、收获。,第一时间获取最新知识点Android架构师之路很漫长,一起共勉吧!,第一时间获取最新知识点。

2401_86968119的博客 1314

IAR for ARM 搭建STM32F103C8T6工程模板(实战指南)

本文详细介绍了如何在IAR for ARM开发环境中为STM32F103C8T6微控制器搭建完整的工程模板。从环境准备、固件库获取、目录结构设计到工程配置与编译调试,提供了实战指南和常见问题解决方案,帮助开发者快速建立稳定的STM32开发环境。

fun88的博客 988

RK3288芯片MIPI-DSI显示疑难杂症大揭秘:从点不亮到花屏全攻克

本文针对RK3288芯片MIPI-DSI接口常见的显示异常问题进行系统性分析,提出了完整的排查解决方案。硬件方面,重点检查排线连接、电源供应和散热问题;软件方面,强调屏参配置、驱动版本及时序参数的精确调整。通过两个典型案例(点不亮与花屏)具体说明排查流程,并指出未来优化方向应包括提升芯片抗干扰能力、开发智能自适应驱动程序等。该手册为开发者提供了从基础原理到实际问题的全面指导,能有效缩短故障排查时间,确保显示系统稳定运行。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 661

Android插件化开发指南——插件化技术简介

文章目录1. 为什么需要插件化技术2. 插件化技术的历史3. 其他 1. 为什么需要插件化技术 插件化技术最初源于将app中一些不常用的功能模块做成插件,主要有两个方面的好处: 减小了安装包的大小; 实现app功能的动态扩展; 但实际上现在插件化80%的使用场景都是为了修复线上BUG。当将一个项目的各个功能抽离为单独的可运行的模块的时候,也就是插件化的时候。如果项目的某个模块出现了问题,那么需要在短时间内修复这个问题,而重新打包发布Android版到各大应用市场却已经来不及了。而插件化就可以做到只需要重

梦否 4178

FATFS挂载多个存储设备(2):功能配置及功能测试

本文介绍了基于FATFS文件系统实现多存储设备挂载的方法,包含底层设备驱动函数编写、功能配置、功能测试。

kevin1499的博客 2585

android插件化开发交流群,android插件化开发activity篇

现在都使用过支付宝吧,支付宝里边有好多功能就是采用插件化开发的,例如支付宝里边的小黄车,小蓝车等功能,都是采用的插件化做的。一开始我认为是WebView做的,后来打开手机里的显示边框布局发现不是WebView,是原生的。他采用的是插件化加载第三方应用。采用插件化开发的好处有宿主app与插件进行分开编译;并发开发节约时间和成本;按需要下载模块,但是第一次加载比较慢。下边我们来讲解一下这个插件化开发:...

weixin_42504279的博客 184

我的宠物狗学编程:从零开始的代码之旅

在这个示例中,我们定义了一个名为"interact"的函数,它通过输入函数获取用户的输入,并根据输入执行相应的代码块。在编程中,我们使用条件语句来根据不同的条件执行不同的代码块。对于我的狗狗,我将创建一个名为"feed"的函数来表示它的进食行为,并根据不同的条件输出不同的信息。在这个示例中,我们定义了一个名为"feed"的函数,并使用一个参数"food"来表示食物。对于我的狗狗,我将创建一个名为"dog_name"的变量来存储它的名字。对于我的狗狗,我将创建一个名为"bark"的函数来表示它的叫声。

2301_79331387的博客 333

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android中的插件化开发

Android中的插件化开发是一种高效、灵活的应用开发方式。它不仅能够提高开发效率,还能为用户提供更加个性化的体验。面对未来的发展,插件化开发需要不断技术创新、完善生态建设,以适应日益变化的移动应用市场。希望本文能够为广大开发者提供一定的参考和启示。

2501_92487853的博客 997

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android之插件化开发

个人认为: 2017年手淘Atlas插件化项目的开源标志着插件化的落幕, 2018年Android 9.0上私有API的限制几乎称得上是要退出历史主流。 如今的插件化技术朝两个方向发展: 其一,插件化的工程特性:模块化/解耦被抽离,逐渐演进为稳定、务实的的组件化方案; 其二,插件化的黑科技特性被进一步发掘,inline hook/method hook大行其道,走向双开,虚拟环境等等。 虽然...

LVXIANGAN的专栏 693

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

[Android]Android插件化开发入门篇

1、什么是插件化开发 拿活跃用户量第一的微信来说,在第三个界面有个游戏,点开后可以选择很多的增植功能,这里腾讯只放了一些网页应用,那么如果未来想加入一个益智游戏,要怎么做?让用户重新安装吗,这就是插件化开发所解决的问题。 插件式开发通俗的讲就是把一个很大的app分成n多个比较小的app,其中有一个app是主app。基本上可以理解为让一个apk不安装也可以被运行。只不过这个运行是有很多限制的运行

陶程的博客 3350

安卓之插件化开发使用DexClassLoader&AssetManager实现功能插件化

在360安全卫士一些应用中,有些功能需要添加(下载)后才可以运行,例如360安全卫士中的抢红包功能。 这是因为这些功能被插件化分离出来成一个apk/zip文件,当用户使用这些功能时,再去下载相应的插件(不安装插件apk)来实现功能,当然也可以删除掉插件文件来实现删除功能的效果,实现了功能的热插拨。 Demo项目的效果图:【开始时 主应用本身未实现“红包助手”功能,然后点击按钮“添加并运行”

cxmscb的博客 1917

什么?现在还有不会插件化的Android开发?

在移动互联网高速发展的今天,应用程序的迭代速度越来越快,功能需求也越来越多样化。为了满足这种快速变化的需求,同时也为了提升开发效率和应用的灵活性,插件化技术应运而生于Android开发领域。然而,尽管插件化已经成为Android开发中的一项重要技能,仍有一些开发者对此知之甚少,甚至未曾涉足。

Android 开发架构 977

360 android插件化开发,详解Android插件化开发-资源访问

动态加载技术(也叫插件化技术),当项目越来越庞大的时候,我们通过插件化开发不仅可以减轻应用的内存和CPU占用,还可以实现热插拔,即在不发布新版本的情况下更新某些模块。通常我们把安卓资源文件制作成插件的形式,无外乎有一下几种:zip、jar、dex、APK(未安装APK、安装APK)对于用户来讲未安装的APK才是用户所需要的,不安装、不重启,无声无息的加载资源文件,这正是我们开发者追求的结果。但是,...

weixin_39627665的博客 336

Android组件化和插件化开发简单介绍

Android组件化和插件化开发简单介绍什么是组件化和插件化?为什么要项目组件化组件化插件化 什么是组件化和插件化? 组件化开发: 就是将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并统一成一个apk,这就是组件化开发。 插件化开发和组件化开发略有不用,插件化开发时将整个app拆分成很多...

fjnu_se的博客 4232

安卓开发:组件化、模块化、插件化方案对比总结

本文对比分析了安卓开发的三种架构方案:组件化、模块化和插件化。组件化如乐高积木,强调独立开发和动态组装;模块化如分封制,注重业务逻辑的清晰划分;插件化则如变形金刚,支持动态加载和热更新。三种方案各具优势:组件化实现高复用,模块化降低复杂度,插件化提供灵活性。同时也面临不同挑战,如组件间通信、依赖管理和安全性问题。开发者应根据项目规模、团队结构和未来需求,灵活选择或组合这些方案,以构建更优秀、可维护的安卓应用。

qq_32890771的博客 1054

探索Android插件化开发的奥秘:《Android插件化开发指南》随书源码推荐

探索Android插件化开发的奥秘:《Android插件化开发指南》随书源码推荐 项目介绍 《Android插件化开发指南》随书源码是一个开源项目,旨在为Android开发者提供一个全面、深入的插件化开发实践指南。该项目不仅包含了书中所有的示例代码,还提供了详细的注释和文档,帮助开发者更好地理解和应用插件化技术。通过这个项目,开发者可以快速掌握插件化开发的核心概念和实现方法,提升应用的灵活性和可扩...

gitblog_01140的博客 980
上一篇: Android 各种Drawable子类简析
下一篇: Gradle Template 模板使用
HelloMagina
博客等级 码龄10年 216粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值