- 博客(32)
- 资源 (2)
- 收藏
- 关注
原创 android studio 2.3与instant run
前言 目前最新的as 2.3上,instant run的cold swap部署方案与之前的版本相比已经发生巨大变化。之前是通过分dex来实现动态部署,而最新的2.3上则是通过split apks技术。看as 2.2的源码,只有部署到6.0以上的机子才会使用split apks方案。as 2.3则是5.0都会用该方案。需要说明的是,在安装时会通过adb install-multiple指令一次性安装
2017-03-11 21:07:05 3289
原创 Instant Run与热修复
简介 对Instant Run还不了解的可以阅读我上一篇文章 Instant Run浅析 。Instant Run与目前很多主流的热修复方案都使用了mutidex技术,andfix除外。其中微信tinker的方案也借鉴了Instant Run。更多热修复的介绍可参考HotFix原理介绍及使用总结。总的来说大致可以分成两类,如andfix的native hook方案,qq空间、微信、手q等的分dex
2016-11-06 18:45:12 1255
原创 Instant Run浅析
Instant RunInstant run是在android studio 2.0引入的,能让我们快速构建运行app。其中包含了四种情况:hot swap、warm swap、cold swap以及无法使用instant run的情况。下面部分引用官方文档进行说明: * hot swap This is the fastest type of swap and makes changes
2016-09-03 15:16:16 2445
原创 APM之实现篇
在前文中已经详细介绍了APM的android端的原理,接下来会通过代码实现记录某类异常日志这个小功能来深入理解APM的实现原理。场景如下,记录所有捕获的IndexOutOfBoundsException。前文中提到,APM一般分为3个部分,plugin、agent和具体的业务代码。本文也将会按这三个分类来介绍。 注:由于篇幅有限,本文所展示的只有部分关键代码,有兴趣的可自行阅读github上的源码
2016-01-01 17:48:13 6235 5
原创 APM之原理篇
APM,应用性能监控,有new relic等产品,对APM感兴趣的应该不会不知道它了。主要功能就是统计分析应用的CPU、内存、网络、数据库、UI等性能,并提供错误日志捕获。编码人员需要做的仅仅是使用它提供的插件和jar包,增加一两行代码即可。接下来,本文会以android端的APM为例,分析它到底是用什么技术实现的,涉及到具体相关业务的,只会简单介绍,不作深入分析。ASM ASM是一个字节码操作
2015-12-09 18:07:43 14048 27
原创 浅析fresco
fresco是facebook主导的一个开源图片缓存库,从它提供的示例程序comparison来看,fresco貌似比其他的几个目前android主流的图片缓存库(glide,picasso,uil等)更快更节省内存。接下来就看看它到底是如何做到的。注:本文分析基于0.8.1版本。背景知识lru与SoftReference那些年的爱恨情仇:很久很久以前,android的内存缓存还用SoftRefe
2015-11-05 00:27:22 5326 2
原创 如何制作一面智能镜子
MirrorOnTheWall前言创意来源:HomeMirror 原文提到了一个东西,tow-way mirror(双向镜)。这个创意就是利用了单向镜(双向镜)光线强的一面无法看到光线弱的一面这个原理来实现遮挡住镜子后面的平板而同时又能显示屏幕上面的字。看过《红番区》的应该知道单向镜是什么了。 原作已经很好了,为什么要重做一个呢?首先,HomeMirror使用的天气接口在国内使用并不是十分准确;
2015-10-01 23:34:52 10699
原创 FlatBuffers小试
FlatBuffers相关资料项目主页:https://github.com/google/flatbuffers详细介绍:http://google.github.io/flatbuffers/据说FlatBuffers(一下简称fb)是一个高效的序列化与反序列化工具,连facebook也用上了它。接下来就看看这个东西到底怎么使用。 项目主页里也没有拎包入住的jar包,up主花了一定时间才
2015-09-19 17:45:25 4430
原创 从TransactionTooLargeException谈到binder的内存管理
前言最近在Activity间传输数据时遇到了TransactionTooLargeException这个异常。了解过binder的看到transaction估计就能猜到这个异常应该跟binder有关。但还不敢百分之百确定,有两个猜测,第一是binder驱动的共享内存不足;第二是Parcel打包数据时有内存限制。网上搜到stackoverflow上有人说过binder驱动限制数据传输的内存为1m。这个
2015-09-07 23:46:51 3129 1
原创 binder学习笔记
学习资料 1.Android Bander设计与实现 - 设计篇 :强烈推荐此文,对binder整体设计讲得比较清楚,十分容易读懂。 2.红茶一杯话Binder:强烈推荐此文,这是一个系列,对binder驱动的具体实现做了详细分析。全文读下来基本对binder就了解得差不多了。 3.《深入理解Android:卷1》中的binder章节:以MediaPlayerService为例分析利用bind
2015-05-29 15:59:17 1148
原创 android自定义View——实现Dribbble的[Open & Close]设计
1、提要Open & Close 在Dribbble的Popular程度能排在所有Shots的首页。而且设计比较简洁,实现起来的难度也相对较小,可以拿来练练手。本文源码猛击:Roujiamo2、分析动画开始前是经典的hamburger,由上中下三条直线组成,以l1、l2、l3表示,动画结束后变成了关闭按钮。关闭的“X“是由hamburger的l1、l3经过旋转变换而来。其中l1绕右
2015-04-14 18:21:38 1381 1
原创 【ffmpeg学习记录】ndk-r10d编译ffmpeg-2.6
roman10写过一篇很详细的使用ndk编译ffmepg的教程,本文仅在此文的基础上稍作修改使其能顺利编译ffmpeg-2.5.3版本。前面两步没啥好说的,直接看第三步,把ndk的路径修改为你自己的路径,注意./configure这段,要把其中的空行给删掉:./configure \ --prefix=$PREFIX \ --enable-shared \ --di
2015-03-13 17:36:21 1170
原创 【ffmpeg学习记录】解决ffmpeg-tutorial的噪声问题
在ffmpeg 2.5.1版本下编译ffmpeg-tutorial,发现所有与音频相关的tutorial都有噪声,而ffplay却能完美播放。问度娘谷歌无果,只好看ffplay的代码。在ffplay.c中,有三个与audio有关的重要函数,分别是read_thread、decoder_decode_frame、audio_decode_frame。read_thread负责从文件或流中读取数据
2015-03-11 21:30:23 4245 2
原创 【ffmpeg学习记录】ffplay的大致流程
运行tutorial03及以后包含音频播放的示例程序,发现播出的声音全是噪声,而ffplay却没出现这个问题,于是决定将ffplay的代码大致看一遍,看看有关音频这部分的处理有何不同。这里只简单介绍ffplay的流程,怎么解决噪音问题将会在下一章说明。数据队列整个ffplay包括6个数据队列,每种数据各两个,包含已解码和未解码:1、视频数据:未解码的is->viddec->queu
2015-03-10 18:06:03 2005
原创 【ffmpeg学习记录】ubuntu下编译ffmpeg及ffmpeg-tutorial
编译ffmpeg的详细步骤见:CompilationGuide/Ubuntu如果在apt-get update或install的时候失败了,很可能是网络问题,多试几次吧~按照步骤来基本没问题。在编译完ffmpeg的时候,可以输出一下环境变量有没设置成功echo $PATHecho $PKG_CONFIG_PATH如果PATH包含了$HOME/bin,PKG_CONFIG_PATH输出
2015-01-27 23:43:44 941
原创 使用sdk19编译带SlidingMenu库的项目
可能会出现以下两个错误:INSTALL_FAILED_INSUFFICIENT_STORAGE、INSTALL_FAILED_MISSING_SHARED_LIBRARY
2014-08-26 00:44:41 791
原创 如何在Linux环境下新建cocos2d-x的eclipse工程
1、复制2d-x示例项目里的一个linux工程hellocpp的proj.linux,通过eclipse导入,rename为你想要的名称。2、打开properties,展开Resource,选择Linked Resources,在Path Variables选项卡删除copy_PARENT,在Linked Resources选项卡编辑Classes,将其Location设置为PROJECT_L
2014-06-30 09:06:18 896
原创 ubuntu下gnutls的bug导致无法连接oschina的git问题
连接https的git时,如果出现以下问题,很可能是gnutls的bug导致的:error: gnutls_handshake() failed: Error in the push function.解决办法:1. sudo apt-get install build-essential fakeroot dpkg-dev2. mkdir ~/python-pycu
2013-09-28 22:00:28 7054
原创 在Eclipse下对Cocos2d-x程序进行debug
如果你的debug时看到如下提示:“no source available for main() at xxx ”并且没办法debug,这时你就要修改一下makefile文件了,把-g参数加进去。具体做法看下面截取的一段makefile:EXECUTABLE = SimpleChessINCLUDES = -I.. -I../ClassesCXXFLAGS=-gSOURCES = ma
2013-09-05 00:36:49 1634 2
原创 Android使用TouchDelegate增加View的触摸范围
by sgwhp,转载请注明。还不知道TouchDelegate这个东西的可以先看一下API,这里大致说一下它的作用:假设有两个View,分别是v1,v2,我们可以通过v1的setTouchDelegate(bounds, v2)来委派触摸事件,其中bounds是一个Rect。v1中,落在这个范围的TouchEvent都会传给v2。既然是这样,那我们可以通过设置某个view的p
2013-09-03 11:26:50 15739 3
原创 Android防止内存泄漏以及MAT的使用
Android发生内存泄漏最普遍的一种情况就是长期保持对Context,特别是Activity的引用,使得Activity无法被销毁。这也就意味着Activity中所有的成员变量也没办法销毁。本文仅介绍如何避免这种情况的发生,其他如Bitmap没有及时回收导致的OOM异常暂不讨论。一、防止内存泄漏什么情况下会长时间保持对某个Activity的引用呢?主要有以下两种情况:1、某个st
2013-08-08 22:01:08 7266 2
原创 EditText在弹出、隐藏软键盘或者布局滚动后SetError文字显示不全的解决办法
最简单的办法是在提示文字后面加入若干个空格。有另外一种做法是使用html格式来显示文字,这可以解决文字完全不显示的问题,但是文字部分被截断的问题能不能解决,没试过,不太清楚。不管用哪种方法,提示文字应该尽量简短。
2013-08-06 11:12:17 3175
原创 cocos2d-x-2.1.4在NDK r9下的编译问题
jni/../../../cocos2dx/platform/android/CCCommon.cpp: In function 'void cocos2d::CCLog(char const*, ...)':jni/../../../cocos2dx/platform/android/CCCommon.cpp:44:72: error: format not a string literal
2013-07-31 09:12:49 9717 13
原创 混淆包含SlidingMenu、gson等Android代码的proguard写法
在混淆包含SlidingMenu的代码时,可能会报以下错误:can't find superclass or interface com.google.android.maps.MapActivity...如果还使用到了gson来序列化或者反序列化json,程序还会抛出NullPointerException,这是因为代码被混淆后,成员变量以及getter、setter的名字都变了,这
2013-07-15 22:08:55 7558
原创 增量升级(省流量更新)的Android客户端实现
By sgwhp (http://blog.csdn.net/sgwhp)转载请注明出处用过类似360手机助手应该对省流量更新都很熟悉了。详细资料可以参考以下两个博客:浅析android应用增量升级Android应用增量升级本文在以上两篇博客的基础上再增加了异常处理,并将生成的so库和Native代码一起打包。1、准备工具(1)bspatch源码(点击下
2013-06-02 23:58:17 12441 5
原创 增量升级(省流量更新)的Java服务端实现
By sgwhp (http://blog.csdn.net/sgwhp)转载请注明出处用过类似360手机助手应该对省流量更新都很熟悉了。详细资料可以参考以下两个帖子:浅析android应用增量升级Android应用增量升级本文需要详细说的是服务端的实现。如果对JNI还不了解的,建议先了解了JNI再看本文。1、准备工具(1)bsdiff源码(点击下载
2013-05-02 02:24:36 8278 3
原创 安装Ubuntu时,部分分区识别不了
在Windows的基础上安装Ubuntu时,由于使用了动态磁盘,这样就会导致部分分区没办法识别。解决办法:只能把动态磁盘转回基本磁盘。推荐使用分区助手,亲测可用,不用格盘,而且不丢失数据。附上分区助手3.0的下载地址:http://d.laomaotao.cc/sort/sort_0/02/%E5%88%86%E5%8C%BA%E5%8A%A9%E6%89%8B3.0%E4%B8%AD%E
2013-05-01 20:49:16 2971
原创 Android连AppFog,响应不更新
在AppFog上部署了一个java的服务,Android客户端使用HttpClient或者HttpURLConnection连接服务器,当客户端请求修改数据库,之后再刷新页面,发现数据是旧的。直接连数据库,明显数据已经写入到了数据库中。百思不得其解,从HttpClient更换到HttpURLConnection都无解。最后在Get请求的Url加上一个变化的参数,这里使用时间System.curre
2013-03-22 14:06:53 893
原创 AppFog入门,数据库连接池
最近在用jdbc连AppFog的数据时,在很短的时间内就抛异常:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure这是一个数据库很经典的异常,但是在我的应用大概对数据库操作了两三次之后就开始抛这个异常了,检查了AppFog的mysql数据库,超时的时间是默认的8小时,不确定是不
2013-03-21 00:57:17 958
原创 AppFog入门,数据库
创建并绑定了数据库之后,怎么连接呢?AppFog有一个名为"VCAP_SERVICES"的环境变量,保存了json格式的数据信息,包括数据库ip、端口、数据库名、用户名、密码等。java可以简单地使用以下代码获得这些数据:java.lang.System.getenv("VCAP_SERVICES")在jsp用out将它输出就可以看到啦。如果你需要在本地对数据库操作,稍微麻烦一点,
2013-03-21 00:39:51 1400
原创 AppFog入门,上传你的应用
AppFog是由AF CLI Tool来控制的,安装这个工具之前,要先安装Ruby,Windows下选择Ruby installer for windows,安装时记得将配置到环境变量的选项勾上,最好装在默认的C盘下。 点击打开链接Ruby安装完成以后,通过以下两个命令来安装AF:$ gem update --system$ gem install af登录命令:$ af
2013-03-21 00:11:33 1459
原创 AppFog入门,创建app
从创建app开始1、选择一种开发语言,以java为例2、选择服务器,这里最好选第一个,新加坡的,其他几个跟本地互连都比较困难,要么被墙了,要么就是数据库创建不了。3、最后选择一个域名,点击Create App即可
2013-03-20 23:59:39 1052
PatchDroid 增量升级的Android客户端jar包
2013-06-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人