![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android
普通网友
这个作者很懒,什么都没留下…
展开
-
插件框架篇一之jar和apk打包
(最后附Fat jar介绍) 环境:Win7 64bit+Eclipse 将工程资源文件进行插件化打包时,遇到问题点: 1、export->JAR file无法编译libs中的jar文件到dex文件; 2、export->Fat jar打包的资源文件无法通过AssetManager进行访问; 3、以上两种方式均可进行选择性打包,apk打包无法过滤文件解决方案: 一、针对问题1,可通过问题原创 2016-07-23 01:18:53 · 1040 阅读 · 0 评论 -
插件框架篇一之三星手机Dialog样式问题
问题: 三星手机系统插件中的Dialog背景黑色无透明、而且diaolog未居中显示。解决方案: 手动设置Dialog window的LayoutParams和背景。原创 2016-07-23 01:57:53 · 396 阅读 · 0 评论 -
插件框架篇一之LayoutInflater解析layout时android.view、android.widget与WebView错误
问题: LayoutInflater解析插件中layout组件时,统一按android.view.*处理,导致TextView等android.widget组件出错。问题分析: 分析LayoutInflater源码 在createView时传递了android.view参数。 createView中通过ClassLoader反射加载组件类,创建TextView时,传入的name参数是原创 2016-07-23 02:01:20 · 468 阅读 · 0 评论 -
插件框架篇一之部分4.0及以下手机(如三星、摩托罗拉)TextView点击/Touch时出错
问题: 部分2.3手机(如三星、摩托罗拉)TextView点击/Touch时,报图片资源not find错误。问题分析: 基于android 4.0源码。 结合”插件框架篇之三星手机插件EditText的textSelectHandle图标报错”篇,分析TextView源码: 在onTouch函数中也调用了textSelectHandle图标。解决方案: 所有TextView或其子原创 2016-07-23 02:04:15 · 426 阅读 · 0 评论 -
插件框架篇一之scrollbars
问题:部分手机(如三星)ListView或GridView设置scrollbars显示时会报错奔溃。问题分析: ScrollView继承于View,在View的构造器中初始化scrollbars。 根据initializeScrollbars判断是否需要进行scrollbars初始化,并在initializeScrollbars函数进行初始化。/** * <p> * Initia原创 2016-07-23 02:10:07 · 1695 阅读 · 0 评论 -
LayoutInflater源码解析
android.view.LayoutInflater是布局解析的主要类,包括setContentView也是走的LayoutInflater。LayoutInflater解析布局主要入口就是inflate()方法,我们就从inflate(int resource, ViewGroup root, boolean attachToRoot)方法开始分析。inflate(int resource, V原创 2016-07-23 02:15:11 · 211 阅读 · 0 评论 -
插件框架篇一之解决系统语言切换插件语言不变的问题
问题: 做国际化的时候,改变系统语言,主工程改变语言,插件只有关闭进程后才会改变。问题分析: PluginLoader工程中->JarResources类->getResourceByCl方法 截取部分代码如下:AssetManager am = (AssetManager) AssetManager.class.newInstance();am.getClass().getMethod("原创 2016-07-23 02:21:54 · 664 阅读 · 0 评论 -
插件框架篇之Activity中theme、launchMode等设置问题
问题: 插件中所有Activity都是通过ProxyActivity代理启动,只需要在主工程的manifest.xml中配置ProxyActivity就可以了。 但是manifest中ProxyActivity的配置是应用于所有插件Activity的,所有导致theme、launchMode等配置灵活度不够。 解决方案: 在PluginConfig中继承ProxyAcitivy衍生插件代理X原创 2016-07-23 02:27:46 · 480 阅读 · 0 评论 -
SparseArray解析
SparseArray是android V4包中提供的工具类,在某些场景下,可以用来替代Hashmap进行对象的存储,其内部实现了一个矩阵压缩算法,可以进行矩阵压缩,大大减少了存储空间,节约内存。此外它的查找算法是二分法,提高了查找的效率。SparseArray的value可以是任意类型,但key只能是Integer、Long类型。所以在key为Integer、Long的场景下,SparseArr原创 2016-07-23 02:32:53 · 1024 阅读 · 0 评论 -
插件框架篇之三星手机插件EditText的textSelectHandle图标报错
问题: 三星手机中插件EditText获取焦点或长按显示SelectHanlder图标的时候,报资源丢失错误。问题分析: 基于android 4.0源码。 EditText继承于TextView。 分析android.view.TextView源码: public TextView(Context context, AttributeSet attrs, int defStyle)构造函原创 2016-07-23 01:55:19 · 745 阅读 · 0 评论 -
插件框架篇一之插件so库的加载
问题:插件中的so无法通过System.loadLibrary加载。问题分析: 在System.loadLibrary函数中通过Runtime.getRuntime().loadLibrary(libName, VMStack.getCallingClassLoader())加载so库,其中VMStack.getCallingClassLoader()获取的是加载当前插件类的ClassLoader原创 2016-07-23 01:51:05 · 2248 阅读 · 0 评论 -
插件框架篇一之jar插件加载方式
随着项目的不断扩大,遇到问题如下: 1、代码也将变得臃肿,而且每次应用更新都需要下载很大的应用包; 2、多项目之间模块重用; 3、项目管理复杂度增加; 4、每次修改模块bug都需要提交应用商店审核。 为了解决以上问题,接下来将分别研究jar插件(dex)和apk插件两种框架。 本文主要介绍jar插件的两种加载方式:静态加载和动态加载。 准备工作如下: 1、win7 64位环境下;原创 2016-07-23 01:31:34 · 1426 阅读 · 0 评论 -
插件框架篇一之Activity和Service
问题:插件是单独以apk形式存在,其中的Activity和Service均无法在manifest中静态注册,所以无法直接调起。解决方案: 采用代理Activity,通过代理Activity的生命周期来管理插件Activity的生命周期。步骤: 1、在主工程中创建代理Activity,取名为ProxyActivity,并在主工程的manifest中进行注册。 2、在ProxyActivity中通原创 2016-07-23 01:34:30 · 203 阅读 · 0 评论 -
插件框架一之ContentProvider和BroadcastReceiver
问题:由于插件是以单独apk形式存在的,所以插件中需要静态注册的ContentProvider和BroadcastReceiver无法生效。解决方案: 1、ContentProvider 主要用于数据库的创建,需要在manifest中注册,但是ContentProvider中数据的创建和ContentResolver对数据库的增删改查操作是相对分开的。所以,可以将ContentProvider的原创 2016-07-23 01:35:34 · 516 阅读 · 0 评论 -
插件框架一之主工程Application中theme使用主工程资源问题
问题:Application中theme自定义style带有主工程资源,影响PrxyActivity的调用。 如果manifest中注册的Activity没有定义theme,就会复用Application中的theme,而PrxyActivity中调用setContentView之前已经把res资源重定向到插件路径下,所以会出现theme中自定义的资源无法调用问题。解决方案: manifest中原创 2016-07-23 01:36:50 · 422 阅读 · 0 评论 -
插件框架一之解决插件布局自定义组件无法使用问题
问题: 在插件中的xml布局中的自定义组件无法使用。分析: 1、LayoutInflater.from(Context)创建LayoutInflater时,执行了Context的getSystemService方法。 LayoutInflater: 2、Context的getSystemService方法在Activity, ContextThemeWrapper中实现,在Context原创 2016-07-23 01:44:28 · 869 阅读 · 0 评论 -
插件框架篇一之问题解决汇总
在搭建插件框架的过程遇到并解决了很多问题,先将遇到的主要问题汇总如下: 一、已解决问题 1、插件包采用什么样的格式。(见笔记:插件框架篇一之jar和apk打包) 2、如何动态加载插件包和调用插件类。(见笔记:插件框架篇一之jar插件加载方式) 3、如何解决资源调用问题。 4、如何解决四大组件之Activity和Service无法静态注册问题。(插件框架篇一之Activity和Service原创 2016-07-23 01:08:40 · 385 阅读 · 0 评论 -
插件框架一之三星ContentView报错bug
问题:在三星手机中,插件Activity中setContentView出错,报的是无法找到资源id #7f…解决方案: 问题出在三星手机rom中中setContentView用到的一些资源只能在主工程resources下完成。所以在ProxyActivity中启动插件activity之前先进行setContentView操作,并添加merge布局,在插件中往content的Fragment中添加布原创 2016-07-23 01:47:20 · 234 阅读 · 0 评论 -
插件框架一之Android5.0非正式版rom插件中new WebView报错
问题:在Android5.0非正式版rom中,插件中new WebView报错。解决方案: 无改rom源码,所以只能通过调试大致推断原因是由于该Android5.0 rom WebView资源单独封装在apk中,在new WebView时加载该资源,但插件定位到插件资源目录下时与webView资源加载器不是同一个,所以导致#20220..无法找到,是accessible_content_view的原创 2016-07-23 01:49:06 · 356 阅读 · 0 评论 -
插件框架PluginLoader
2014年9月,公司项目过于臃肿,而且遇到65536方法数超限问题。计划准备拆分模块,并通过插件方式进行在线更新。当时我花了一个月时间,开发这个插件框架,并把搜索、聊天室、游戏等模块打成插件形成,期间项目经历了大大小小十几个版本迭代,插件框架也一直稳定运行到现在。该插件主要原理是动态代理。插件主要开发时间是在2014年9月到10月,后续只是修复一些bug,主要精力集中在了业务开发上了。原创 2016-07-23 00:57:02 · 644 阅读 · 0 评论