8 _区长

尚未进行身份认证

我要认证

业精于勤,荒于嬉;行成于思,毁于随!

等级
TA的排名 2k+

Android 一种在Dalvik虚拟机上多Dex加载优化的方案

在Android源码中,DexFile中有一个openDexFile方法,就是通过byte数组加载一个Dex,可以达到秒级加载,亲自测了下,如果一个使用Multidex加载的App,第二个Dex如果需要加载耗时2s+,则使用这个函数去加载,只需要300ms以内即可完成

2016-11-28 18:26:24

一篇胎死腹中的Android文章——Dex文件结构解析

前言国庆的时候,为了理解DexDiff算法,花了几天时间研究了下Dex的文件结构,算是有个整体的把握,这篇文章是在姜维的 《Android逆向之旅—解析编译之后的Dex文件格式》基础上,自己对Dex格式的理解,以防忘记,做一次备忘。在理解Dex文件格式之前,需要了解两个概念:字节序和LEB128格式

2016-10-24 11:52:19

Android最佳实践——深入浅出WebSocket协议

WebSocket协议是一种建立在TCP连接基础上的全双工通信的协议。全双工就是指客户端和服务端可以同时进行双向通信,强调同时、双向通信。WebSocket可以应用于即时通信等场景,比如现在直播很火热,直播中的弹幕也可以使用WebSocket去实现。

2016-10-17 22:25:54

Android 热补丁技术——资源的热修复

今年真是热补丁框架的洪荒之力爆发的一年,短短时间内,已经出现了好几个热修复的框架了,基本上都是大同小异,这里我就不过多的去评论这些框架。只有自己真正的去经历过,你才会发现其中的坑。事实上,现在出现的大多数热修复的框架,稳定性和兼容性都还达不到要求,包括阿里的Andfix,据同事说,自己的app原本没有多少crash,接入了andfix倒引起了一部分的crash

2016-09-15 08:55:30

记一次Docker下安装Logstash+Elasticsearch+Kibana经历

前言最近遇到一个困惑,在kibana上捞自己想要的数据,无奈无法提取一个字段中的kv值。作为一个移动开发人员,对这种东西简直就是日了狗了,请教了下公司推荐组的人,也没有得到结果,还是得自己动手,所谓靠别人不如靠自己。这个数据在kibana上显示的是一个用英文逗号分隔,用等号连接的键值对,假设这个字段显示的是args,其值为:args:key1=value1,key2=value2,key3=valu

2016-08-27 15:20:55

Mac OSX Docker下搭建Android+Jenkins+Gitlab

之前写过一篇Mac OSX搭建Jenkins持续集成环境,后来mac从10.11升到了10.11后,Jenkins就不可用了,最近测试一些功能需要再次用到Jenkins,为了杜绝之前发生的问题,这次就用Docker来搭建,记录一下。安装Docker for mac随着Docker的不断迭代,官方已经对Mac有了支持,不再像之前那样,mac下搭建个docker还要装各种东西。首先下载官方的Docker

2016-08-15 21:44:26

在Android中使用Lombok减少编码

Lombok的介绍,可以看官网的一段视频 https://projectlombok.org/。说得简单一点,该框架可以用来精简java代码,提升开发效率,利用注解在编译期生成getter/setter/toString()/hash/equals/construct等等方法。在web中用得比较多,但是在android上估计用得少之又少。个人认为在没有很好的评估该框架的兼容性前,在实际生成项目中最好

2016-08-13 16:24:19

Gradle系列之从init.gradle说起

用过maven的开发者都知道,在maven里一些信息可以定义在全局的配置文件中,比如把一些仓库信息定义在用户目录/.m2/setting.xml文件中,这样就不用每个项目都配置这些相同的配置了。对于Andorid开发者来说,使用gradle比使用maven更常见,在开发中说不定你会在每一个项目中配置一遍公司的仓库地址,定义一些相同的配置,那么在gradle中有没有类似maven的这么一个配置文件可以

2016-07-31 18:18:23

Android Classloader热修复技术之百家齐放

大概在2015年10月底,QQ空间发了一篇叫《安卓App热补丁动态修复技术介绍》的文章,文章中提到为了能让Class进行热修复,其中一个条件就是防止类被打上CLASS_ISPREVERIFIED标记,具体的做法便是让一个Dex引用另一个Dex(hack.apk)中的空类(为了让业务无感知,需要在编译时动态注入字节码),并且在应用程序Application类起来的时候要加载这个hack.apk。也就是

2016-07-21 19:24:39

Android OkHttp实现HttpDns的最佳实践(非拦截器)

之前写过一篇文章 Android 使用OkHttp支持HttpDNS,该文章中使用的是OkHttp的拦截器来实现HttpDNS。在请求发出去之前,将URL中的域名替换成ip,再往Header中添加Host。这种方式有以下优点。上层方便控制哪些请求使用了HttpDNS,可以做相应的容灾处理,比如ip请求失败时使用域名进行重试。同样的也有很多缺点。Https场景下ip直连出现的证书校验问题代理场

2016-06-20 16:47:23

如何脱离Android源码环境编译aapt

由于要修改aapt源码,所以clone了一份android源码,无奈mac的ssd只有256G,所以把源码下到了虚拟机里,这个虚拟机在移动硬盘中,系统是ubuntu的,编译linux和windows版的aapt没有问题,但是需要编译mac的aapt时就遇到了问题,我不可能把ubuntu中的源码整个拷到mac中去编译,加起来有好几十G呢,ssd已经爆了。于是,我需要将aapt的最小依赖环境提取出来。标

2016-06-08 14:15:23

Ubuntu下Android Studio Gradle sync failed peer not authenticated

最近需要用到Ubuntu,不料遇到了一个奇葩问题,尝试了各种方法没有结果,后来在github上找到了解决方法。原因是https导致的,把证书导入进可以了。

2016-05-28 19:18:49

Android热更新之so库的热更新

声明:本篇文章禁止转载,原创地址:http://blog.csdn.net/sbsujjbcy/article/details/51475499【区长原创】本来想写资源的热修复的,虽然方案差不多已经完成了,但是考虑到一些敏感问题,资源修复就不写了。那就来写写so的热修复,其原理和class的修复是一样的,但是so的热修复的需求并不高,就当做学习吧。首先来总结一下Android的ClassLoade

2016-05-22 16:28:30

如何在不影响原有aapt源码的情况下编译定制版aapt

上篇文章Android aapt实现资源分区(补充携程aapt源码)讲了通过修改aapt源码来实现资源的分区。但是我想保留一份原来的源码,而不是通过git去查看历史的版本。这时候,就需要编译自定义的模块。在这之前,需要搭建环境和下载源码,具体可以参考google官方的文章。Establishing a Build EnvironmentDownloading the SourceBuildin

2016-05-15 19:28:59

Android aapt实现资源分区(补充携程aapt源码)

大致内容看这篇文章Android中如何修改编译的资源ID值(默认值是0x7F…可以随意改成0x02~0x7E),但是该文章中修改并不完全,是有问题的,见后文细说。该文章也参考了携程的aapt源码。从该文章中看到修改的地方主要有这么几个地方。 - 加入- -apk-module 参数读取外部packageId值。 - 根据Bundle把packageId传入,并进行传递。 -

2016-05-14 12:16:26

Android 从枚举到注解最佳实践

背景前几天看到秋百万的一篇文章Android 中的 Enum 到底占多少内存?该如何用?,其实我对这个东西还是很敏感的,因为最近我就在Android的项目中就用到了一个枚举类。其实不是不知道枚举的坏处,而是枚举具有很好的约束能力,所以才选择了它。但是似乎在Android平台上其约束能力体现出来的优点还不足以抵消它的缺点,恰恰其带来的内存消耗牺牲更大。当然我是知道这一点的,但是我没对具体的数值做过测试

2016-05-01 22:45:56

反射还能这么玩?

其实本来想加个前缀,结果标题是《Android 中反射还能这么用?》,后来想想,也不恰当,就把Android去了,本身反射是Java的东西,你硬生生的加个Android显然是不恰当的。 这几天稍微过了一下Weex的源码,可谓是亲眼目睹了它的源码。无意间发现一个类,叫WXHack,搜索一下代码,发现在Weex里用的地方就一处,好奇心驱使下去看了WXHack的源码,好家伙!看完之后总觉得这个类似曾相识

2016-04-29 11:32:18

Mac OSX搭建Jenkins持续集成环境

为什么是用Mac而不是Linux服务器呢?因为自己的linux服务器配置太垃圾了。。。。如果你有linux服务器并且配置还可以,那么就用linux服务器吧,本篇文章以mac为例。至于什么是Jenkins,百度。。。下载Jenkinsjenkins-1.651.1.pkg安装mac正常软件的安装流程几个命令alias ci_start="sudo launchctl load /Library/Lau

2016-04-16 11:56:49

聊聊Android 热修复Nuwa有哪些坑

前面写了两篇关于Nuwa的文章然后我说了Nuwa有坑,有人就问Nuwa到底有哪些坑,这篇文章对自己在Nuwa上走过的坑做一个总结,如果你遇到了其他坑,欢迎留言,我会统一加到文章中去。当然有些也不算是Nuwa的坑,算是ClassLoader这种方式进行热修复暴露出来的问题吧。

2016-03-31 21:51:50

Android 热修复使用Gradle Plugin1.5改造Nuwa插件

从1.5开始,gradle插件包含了一个叫**Transform**的API,这个API允许第三方插件在class文件转为为dex文件前操作编译好的class文件,这个API的目标就是简化class文件的自定义的操作而不用对Task进行处理,并且可以更加灵活地进行操作。我们如何注入一个Transform呢,很简单,实现Transform抽象类中的方法,使用下面的两个方法之一进行注入即可

2016-03-12 10:13:21

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!