- 浏览: 2203912 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
因为想要将本网站上的开源代码直接做成一个能显示效果的app,决定摸索下android的插件开发,发现只有两个开源的插件系统可选:
AndroidDynamicLoader
dynamic-load-apk
因为第一个只允许在fragment的基础上开发插件,第二个没有此限制并且是国人开发,文档比较齐全,所以选择了第二个。
下载dynamic-load-apk
dynamic-load-apk 简称DL框架,从github上下载DL,如下:
lib是Library,sample是例子程序,打开sample如下:
根据官方的解释,有三种模式,其中main目录下才是其推荐的独立插件模式,所以直接不管depend_on_interface这个文件夹了。
其中main-host是宿主,他需要引用DL的Library才能运行,main-plugin-a,以及main-plugin-b是插件。
运行sample中的宿主和插件
我将main直接import到eclispe中,并且将DL的Library也导入,将main-host添加Library依赖,运行main-host程序,当然了 显示的是没有插件,因为main-host程序需要在sdcard的根目录下建立DynamicLoadHost目录,然后DynamicLoadHost目录中放入插件的apk。这主要是因为main-host程序的代码是这样写的:
pluginFolder指定为DynamicLoadHost。
当然你自己写的宿主程序完全可以指定为其他目录,甚至直接来源于网上(只是猜想),如果不支持直接加载远程的apk,我们可以先从网上下载下来,放到我们程序指定的一个目录。
接着我们再运行main-plugin-a,产生一个apk放到刚刚在sdcard建立的DynamicLoadHost目录。
然后再次打开宿主程序,点击这个插件,和预期是一致的,插件就像一个apk一样执行了。
尝试自己的apk
虽然官方文档已经说明插件apk需要满足一些要求(context不能用this,jar不能打包在apk中(主要是DL的jar以及surport的jar)等),但是我还是忍不住要尝试一下直接把我的apk放进sdcard的DynamicLoadHost目录,运行宿主程序,列表中能看到我的apk程序,点击,没反应。。。。。。。。。
虽然在意料之中,但是小心脏还是小小的失落。
先说下我运行的这个程序叫GossipView,在github上可以下载,因为GossipView非常简单且具有代表性,没有依赖其他库(GossipView是直接在demo中一起的),有activity,有一个自定义的GossipView。对于我准备开发的东西来说,如果这个东西都不能运行,那就没什么意义了。
我开始改造我的GossipView,让他可以作为插件了:增加了external-jars 将DL的jar放进去,并且将surport的jar也放进去,同时在.classpath中追加如下两句:
<classpathentry kind="lib" path="external-jars/dl-lib.jar"/>
<classpathentry kind="lib" path="external-jars/android-support-v4.jar"/>
这样,编译的时候就能够正常进行,但是打包的时候,就不会把上面两个jar包打入到插件apk中。
接下来不是要改this为that吗,改呗,我发现我的activity中只有一处用了this,替换成that,运行。得到了一个apk,但是很奇怪的是我的插件居然能直接运行,不是说那样做两个jar不会被打包进去吗怎么还能运行了呢。。。。
管他的哦,先将这次的apk放进去再说。
运行宿主,点开我的插件,报错了:
看来还真的是包多了,也就是说我的插件apk中其实把DL和surport的jar打包进去了。
我找啊找啊找,发现是自己粗心了,我在插件项目中添加了两次DL,一次是用jar,一次是直接添加了Library的依赖。fuck。
好吧改过来之后,完全可以了,只是原本我应用的白色背景变成了黑色背景。
AndroidDynamicLoader
dynamic-load-apk
因为第一个只允许在fragment的基础上开发插件,第二个没有此限制并且是国人开发,文档比较齐全,所以选择了第二个。
下载dynamic-load-apk
dynamic-load-apk 简称DL框架,从github上下载DL,如下:
lib是Library,sample是例子程序,打开sample如下:
根据官方的解释,有三种模式,其中main目录下才是其推荐的独立插件模式,所以直接不管depend_on_interface这个文件夹了。
其中main-host是宿主,他需要引用DL的Library才能运行,main-plugin-a,以及main-plugin-b是插件。
运行sample中的宿主和插件
我将main直接import到eclispe中,并且将DL的Library也导入,将main-host添加Library依赖,运行main-host程序,当然了 显示的是没有插件,因为main-host程序需要在sdcard的根目录下建立DynamicLoadHost目录,然后DynamicLoadHost目录中放入插件的apk。这主要是因为main-host程序的代码是这样写的:
private void initData() { String pluginFolder = Environment.getExternalStorageDirectory() + "/DynamicLoadHost"; File file = new File(pluginFolder); File[] plugins = file.listFiles(); if (plugins == null || plugins.length == 0) { mNoPluginTextView.setVisibility(View.VISIBLE); return; } for (File plugin : plugins) { PluginItem item = new PluginItem(); item.pluginPath = plugin.getAbsolutePath(); item.packageInfo = DLUtils.getPackageInfo(this, item.pluginPath); if (item.packageInfo.activities != null && item.packageInfo.activities.length > 0) { item.launcherActivityName = item.packageInfo.activities[0].name; } mPluginItems.add(item); DLPluginManager.getInstance(this).loadApk(item.pluginPath); } mListView.setAdapter(mPluginAdapter); mListView.setOnItemClickListener(this); mPluginAdapter.notifyDataSetChanged(); }
pluginFolder指定为DynamicLoadHost。
当然你自己写的宿主程序完全可以指定为其他目录,甚至直接来源于网上(只是猜想),如果不支持直接加载远程的apk,我们可以先从网上下载下来,放到我们程序指定的一个目录。
接着我们再运行main-plugin-a,产生一个apk放到刚刚在sdcard建立的DynamicLoadHost目录。
然后再次打开宿主程序,点击这个插件,和预期是一致的,插件就像一个apk一样执行了。
尝试自己的apk
虽然官方文档已经说明插件apk需要满足一些要求(context不能用this,jar不能打包在apk中(主要是DL的jar以及surport的jar)等),但是我还是忍不住要尝试一下直接把我的apk放进sdcard的DynamicLoadHost目录,运行宿主程序,列表中能看到我的apk程序,点击,没反应。。。。。。。。。
虽然在意料之中,但是小心脏还是小小的失落。
先说下我运行的这个程序叫GossipView,在github上可以下载,因为GossipView非常简单且具有代表性,没有依赖其他库(GossipView是直接在demo中一起的),有activity,有一个自定义的GossipView。对于我准备开发的东西来说,如果这个东西都不能运行,那就没什么意义了。
我开始改造我的GossipView,让他可以作为插件了:增加了external-jars 将DL的jar放进去,并且将surport的jar也放进去,同时在.classpath中追加如下两句:
<classpathentry kind="lib" path="external-jars/dl-lib.jar"/>
<classpathentry kind="lib" path="external-jars/android-support-v4.jar"/>
这样,编译的时候就能够正常进行,但是打包的时候,就不会把上面两个jar包打入到插件apk中。
接下来不是要改this为that吗,改呗,我发现我的activity中只有一处用了this,替换成that,运行。得到了一个apk,但是很奇怪的是我的插件居然能直接运行,不是说那样做两个jar不会被打包进去吗怎么还能运行了呢。。。。
管他的哦,先将这次的apk放进去再说。
运行宿主,点开我的插件,报错了:
看来还真的是包多了,也就是说我的插件apk中其实把DL和surport的jar打包进去了。
我找啊找啊找,发现是自己粗心了,我在插件项目中添加了两次DL,一次是用jar,一次是直接添加了Library的依赖。fuck。
好吧改过来之后,完全可以了,只是原本我应用的白色背景变成了黑色背景。
发表评论
-
jni未释放资源问题。Failed adding to JNI local ref table (has 512 entries)
2016-02-01 14:51 983Native Code 本身的内存泄漏 JNI 编程首先是一 ... -
android ApkPlug使用
2015-12-09 15:14 734直接下载附件吧, 有两个是官方的demo包,还有一个是他们技术 ... -
Android动态加载进阶 代理Activity模式
2015-11-30 17:20 885技术背景 简单模式中 ... -
Android NDK rb5 文档之本地活动和应用程序
2015-11-24 22:34 814Native Activities and Applicati ... -
Android NDK rb5 文档之 native_activity.h 文件翻译
2015-11-24 22:30 1009/** * Copyright (C) 2010 The A ... -
Android新技术学习——阿里巴巴免Root无侵入AOP框架Dexposed
2015-11-21 13:49 1792引用阿里巴巴无线事业部最近开源的Android平台下的无侵入运 ... -
Android NDK开发之JNI基础知识
2015-11-21 13:05 1128JAVA层与JNI层数据类型的对应 下面是一个测试方法 pu ... -
ANDROID2.2 JNI 配置luajit2
2015-11-21 11:18 744去http://luajit.org/官网下载最新的版本 在 ... -
在Android平台上加载本地库的危险性[转]
2015-11-13 09:30 1588在2012年KeepSafe的创业初期,我们试图找到一种为An ... -
JNI: 能否用 GetFieldID()/GetStaticFieldID()取得enum变量的属性?
2015-11-06 11:52 1846没有问题的,jni下面一样可以动态获取的 仅供参考! VOI ... -
ndk-stack定位不出崩溃代码行的问题
2015-10-30 08:51 1250NDK开发包中自带的NDK-STACK工具是可以查看崩溃栈信息 ... -
Android.mk文件详解
2015-10-27 09:23 1843Android.mk是Android提供的 ... -
NDK在增加断点时跳不进去,不管用的解决办法
2015-10-26 10:09 1106先看下面的错,如果报的不是这个那就不是我这个问题,那就不用再看 ... -
插件化的基石 -- apk动态加载
2015-09-25 09:13 971Android动态加载技术在蘑菇街的第一次实践,还是在14年的 ... -
warning:deprecated conversion from string constant to 'char *' 解决方案
2015-09-25 09:01 1856char* createClass(){ ret ... -
jni内存释放
2015-09-24 12:03 3676调用GetStringUTFChars,GetDoubleAr ... -
如何不要让ndk-build自动删除.so
2015-08-04 15:33 1175在用ndk-build的时候突然发现在编译完成之后会自动删除a ... -
超简单的NDK单步调试方法
2015-08-03 21:19 602最近为了性能需求,开始搞JNI,白手起搞真心不容易。中间差点崩 ... -
JNI调用java中的类方法和静态方法
2015-08-03 16:46 2758在JNI调用中,肯定会涉及到本地方法操作Java类中数据和方法 ... -
[转]Android JNI层实现文件的read、write与seek操作
2015-08-03 14:41 12541、 在Andr ...
相关推荐
动态加载APK(Apk Dynamic Load)就是这种技术的一种实现,它允许主应用程序在运行时加载外部的APK文件,从而扩展其功能。下面我们将深入探讨这一技术及其相关的知识点。 首先,我们来理解一下“插件机制”。在...
常见的插件化框架如ApkPatch、Dexposed、DynamicLoad等,通过修改或扩展Android系统的ClassLoader来实现对插件的加载。插件化不仅实现了模块间的解耦,也使得应用能够根据需求动态扩展功能,如添加新的服务、活动或...
#动态加载 Apk 框架##动态加载apk框架可以加载本地apk文件,启动目标apk活动,使用资源和资产##Thanks for ##base of this: ##I add apk md5 check(如果运行时更改apk文件,即使是相同的类文件也会导致...
DL : Apk动态加载框架 开发文档 (Development Help) English README [使用Android Stuido导入项目](Android Studio.md) APK动态加载框架(DL)解析 DL 2.0的新特性 支持多进程模式,插件可以运行在单独的DL进程中...
插件的实现得益于 dynamic-load-apk-Apk动态加载框架,目前本项目已经不再更新,在功能方面类似于本站的例子大全部分,对所有的小例子进行分类展示,只不过提供一个动态的加载预览功能。本站的小例子虽然不提供动态...
动态加载卸载的 APK(也称为插件) android上的插件框架,无需安装、修改或重新打包即可运行任何第三方apk 提供英文和中文文档,由@Qihoo360 提供支持。 更少的代码侵入,但遗憾的是,它是一个 Eclipse 风格的项目。...
在Android开发中,动态加载未安装的apk或jar包是一项重要的技术,它允许应用程序在运行时根据需要加载和执行新的功能..."dynamic-load-apk-master"这个压缩包可能包含了实现这种技术的源码示例,是学习和研究的好材料。
插件的实现得益于 dynamic-load-apk-Apk动态加载框架,插件源码在例子大全(http://www./demo)有收录,目录例子大全\系统相关\插件机制。(目前本项目已经不再更新,在功能方面类似于本站的例子大全部分,对所有的小...
Dynamic-load-view can load View in external apk. you can use it to hotfix View or update module in your App. ScreenShot download Demo APK PicUrl Future The plugin is independent to host App totaly....
在动态加载Apk时,可以模拟安装流程,生成`PackageInfo`,然后使用`DexClassLoader`加载Apk内的Dex。 3. 注册与卸载:动态加载的Apk需要在运行时注册到系统,以便能够执行其组件。这通常通过反射调用`...
"Android-针对DynamicLoadApk做的一些上层工作"的标题表明,我们将探讨一个基于开源项目Dynamic-load-apk的上层封装框架,该框架增加了新的功能,如将插件动态加载到`libs`目录以及对模块Service的注入。 首先,让...
源码Direct-load-apk,Direct - load - apk 是一个强大的插件化框架, 通过使用它, 你可以实现看似不可能实现的功能 ----- 直接加载一个普通apk! 优势: Direct - load - apk 能够加载插件的全部 资源. 支持 插件间 ...
### 动态加载APK或JAR或DEX详解 #### 前言 在移动应用开发领域,用户体验一直是开发者关注的核心。随着技术的发展,Native App 和 Web App 在用户体验上各有千秋,但频繁的版本更新成为了 Native App 面临的一大...
在提供的文件列表中,`Dynamic`和`ForceApkObj`可能分别代表动态加载相关的源代码文件和类对象。在`ForceApkObj`中,可能包含了一个强制加载APK中特定类的对象,这在处理插件化或模块化时非常有用。通过分析这些源...
从https://github.com/singwhatiwanna/dynamic-load-apk上面下载的Lib,自己动手新建了几个工程做的,免安装apk的加载,对开发过程中的一些问题做了一些使用说明,方便自己日后使用
插件的实现得益于dynamic-load-apk-Apk动态加载框架 。目前已经完成的插件非常少,还需要大量的编译插件的工作。希望能有更多的朋友参与进来。 插件 如果您该项目顾问,可以加入到我们的插件开发中,将您根据dl框架...
目前,Android社区提供了多种插件化框架,如DynamicAPK、dynamic-load-apk、SmallDroid、Plugin、RePlugin和VirtualAPK。这些框架各有特点,选择时需根据实际需求考虑。例如,如果插件与宿主无耦合且无需通信,...
在Android应用开发中,插件化技术是一种将应用程序的部分功能以插件的形式动态加载到主程序中,使得应用能够实现...在实际工作中,结合其他优秀开源项目如Dexposed、DynamicLoad等,可以构建出更完善的插件化解决方案。