Android

Android支持按键双击事件

最近做的东西比较杂,是得梳理一下了~ 参考了这篇文章。 按键双击,这种组合键的做法类似volume down键 + power键 = 截屏 因为两个按键之间肯定会有时间差,而双击其实就是x键 + x键; 开翻~ Android上keyevent,在framework层是由window manager来负责转发,找到PhoneWindowManager,会发现这里对于keyevent的各种intercept简直就是hook的绝佳地点: interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) 等。。。 找到interceptKeyBeforeDispatching对volume down + power的处理(

Android

用Selinux遇到的限制

(一停手就是若干年啊。。。) 在做一个有趣的小功能,具体什么就不说了。中途遇到了一个问题,media进程直接写文件的时候无权限: fopen后strerrno(errno)是:permission denied. 翻了翻,应该是sepolicy(selinux)的限制导致的。 找到篇文章大概介绍了selinux和sepolicy设置(android L开始是建议厂商强制使用的) 还有一篇更偏实用。 打开/external/sepolicy/mediaserver.te (其实还有一个device/qcom/sepolicy/common/mediaserver.te,暂未确认是用哪个,还是做了一个交集) 但可以确认的是camera_data_

Android

Android Camera HAL3.0

官网文档在此 简单来说,3.0的设计初衷就是 -- 提供per-frame操作的灵活性。 更多细节在官网上写的很清楚了,这里就不再赘述。 罗列一些点,跨度比较大,想到哪说到哪。 Camera 接口 首先接口本身的设计存在缺陷: 例如setPreviewSize和setPreviewFrameRate是无关的。(但其实这很有关系) 对于ISP这种pipeline来说,类比水管,最大出水量是恒定的;所以理论上,单帧size越大,那帧率(fps)也就越低。 所以size和fps是应该有明确的对应关系的。但这个接口把这个关系打破了。 那是否就无法获取这种对应关系了那? 并不是。Camera提供了CameraCharacteristics来获取更具体的信息,但是要麻烦一些; 可以参考cts测试中,getAvailableMinFrameDurationsForFormatChecked的做法;通过StreamConfigurationMap来算出fps和width/

Android

Android ImageFetcher

Google完善文档后,也提供了一大批优秀的源代码。 ImageFetcher就是其中之一,这货非常简洁的实现了用ImageView来异步加载网页图片,同时对图片进行二级缓存的功能。 稍微改改就可以轻松适配任何图片资源(例如本地,例如需特殊条件(如宽高,比例,透明度等)等)了。 主体代码构成: 外部调用如下: New: ImageFetcher imageFetcher = new ImageFetcher(context, width, height); 就可以了。 当然这里一般都会改动; 例如为了区分cache目录,会把unique folder name作为参数传入进去)。 例如为了替换默认图,把图标传进去。 例如为了适配任何图片资源,增加自定义的ImageProvider,

Android

Android SparseArray中indexOfValue返回-1

继续Android。 SparseArray<T>是蛮好用的基本类型,一般用来替换掉HashMap<Integer, T>。 有时候偷懒,也会用它来替换Object[],也就是基本数组。 因为这货有indexOfValue(这样就不用去遍历找索引啦),遍历也比HashMap方便的多。可以满足对基本数组的需要(但性能不高,使用需谨慎,文档有详细解释为什么)。 但是,这玩意儿有个坑,也就在indexOfValue里面。 当用它来存储String时,可能会出现明明Value已经put进去了,但是indexOfValue就是返回-1的情况。 一开始还以为可能是线程安全相关的问题,还打算加锁来着。结果。。。 原因在于: Note also

Android

Android RelativeLayout中wrap_content和alignParentBottom的冲突

继续随便记录一下,之前也说过,Android类似的坑不少。 下面又是一例: RelativeLayout中,为了方便布局,子view经常会用到alignParentBottom/Top/Left/Right等,如: android:layout_alignParentBottom="true" 但这时候需要注意的是,如果parent是wrap_content的话,alignParentRight就意味着要求parent的layout_width="match_parent"; alignParentBottom就意味着要求parent的layout_height="match_parent" 这会带来什么问题那?

Android

Android LinearLayout动态增加item时Weight的设置

Andorid上,LinearLayout动态增加child item时,一般如下: addView(child) 即可。 child item可以从xml中直接inflate出来。 这里有个问题是,动态增加的话,child item中的weight,在add到LinearLayout后无效(用LinearLayout,很多时候就是冲着weight去的,因为可以很容易做到对齐和分割)。 唯一的办法是在addView的时候用新的LayoutParams来指定weight: addView(child, new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1)); 最好设置一下weightSum: setWeightSum(childCount); Android的layout配置中,

Android

Android java.lang.ClassNotFoundException

ClassNotFound原因较多,这里列一个特殊case: 抽象类A,因项目关系,code clean后,已无抽象方法(但依然带着abstract关键字) 没深究过java语法,不过没有抽象方法却声明为抽象类,至少该有个警告把?而这里Eclipse(ADT)/Android studio均无任何提示,所以怀疑是JDK的bug)。 Main activity继承自A。然后启动Main activity即报ClassNotFound。 log里面会有奇怪的: 11-19 16:51:21.301 W/dalvikvm(31571): Unable to resolve superclass

Android

关于Android如何动态加载res

最近抽时间看了一下android插件化的东西。 也稍微研究了一下。总结一下权当记录。 同时也把研究过程中的testbed上传到github了,造福后人吧。 为什么需要插件化? 最简单的原因大概就是为了避免过大的体积(rom size),以加速下载和安装。 更多的原因例如插件化后可以单独升级避免每次一个小改动就app体量的升级,为了针对不同区域不同用户做不同的适配,为了市场更高的单app评分(插件的差评不算主app中)等等。 哪些可以插件化? 大部分的功能性代码/资源及非自定义的布局 可用插件化方案: 这里仅讨论:以apk(在插件化的前提下,相比较jar,apk要灵活的多)的形式插件化的方案。 这里不讨论:自行定义数据格式,并自行实现解析器(parser或LayoutInflater)的方案。(因为造这种轮子总让我想起曾经一个叫XXUI的垃圾框架。。。) 已安装插件apk的情况下: 读取静态资源(

Android

Jenkins android 自动化编译的一些坑

Jenkins就是Hudson的元老们,对Oracle注册Hudson商标(Sun被吃了嘛)并且打算将其私有商业化表示不满后,另起炉灶的产物(所以和hudson不仅看起来像,连插件基本都通用。。。) 更具体的细节请移步Wiki [本文非科普/教程贴,仅供尝试使用Jenkins/Hudson但遇到问题的同学们,填平几个脚下的坑。] 基本教程: 直接安装运行install jenkins就可以了,然后访问localhost:8080就可以看到基本页面。 https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu https://wiki.jenkins-ci.org/display/

安全

说说前段时间闹得很凶的“手机超级病毒”

如手机超级病毒 之前的之前有public过一份源码,在开放信息间谍的全部源码并停止服务 那代码里面已经涵盖了对短信/通话记录/联系人的获取和上传等功能(甚至基站定位的代码都有。。。),换言之,直接拿这源码改几行代码就可以完成那个所谓的“手机超级病毒”鸟。(如果乐意,即使是生手,花一点点时间也可以发布“病毒”了!) 这么一个low level用来忽悠忽悠抓小三的怨妇们的玩意儿,加了一个短信群发,居然被炒的如此火热。。。也许是那段时间没新闻了所以硬要拉点头条出来吧。。。 对于那些在这件事情上说“you can you up, no can no BB”的人,我要说一声,“我有代码,