推荐文章 New Blog
Malloc Debug
翻译至:https://android.googlesource.com/platform/bionic/+/master/libc/malloc_debug/README.mdMalloc Debug(内存调试)简介Malloc debug 是一种native层内存问题的方法。他可以帮助我们定位内存损坏、内存泄露、释放后再使用的问题。这个文档描述如何在Android N版本以后的Android系统中使用这个功能。对于老版本的malloc debug的方法见这个链接(https://android.googlesource.com/platform/bionic/+/master/libc/malloc_debug/README_marshmallow_and_earlier.md)。当malloc debug功能使能后,系统增加了一个Hook层代替正常的内存分配调用。这里主要替换了下面的...May 1, 2018, 2:41 p.m.作者:zachary分类:Android阅读(6732)评论(0)
Android 堆栈打印方法总结
framework层(java层)try { Log.i(TAG,"--------------NullPointerException-------begin"); throw new NullPointerException(); } catch (NullPointerException e1) { // TODO: handle exception Log.i(TAG, "-------------NullPointerException"); &nbs...Dec. 31, 2017, 4:16 p.m.作者:zachary分类:Android阅读(2284)评论(2)
ZRAM实现原理详解
一、ZRAM的背景我们知道在不论是windows还是linux都有一个交换文件,这个交换文件是放在磁盘上的,对于手机设备也是可以这样做的,但是在移动设备中没有像PC机那样的磁盘,而是使用的是flash,Flash的读写寿命远不如磁盘,所以如果使用交换文件,将大大缩短Flash的寿命。为了不缩短Flash的寿命,程序员想了一个办法就是ZRAM,通过内存存放内存中的数据,只是将数据做了压缩,这样就可以用10M的内存存放20M的数据了,当然这只是一个比方,实际可能压缩的更小,这样同时也不会写入Flash进而影响Flash的寿命。 二、ZRAM的启用内核编译打开CONFIG_SWAP=y CONFIG_CGROUP_MEM_RES_CTLR=y CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y CONFIG_ZRAM=yCONFIG_ZSMALLOC=y启用ZR...Feb. 26, 2017, 10:05 p.m.作者:zachary分类:Android阅读(7217)评论(0)
oat文件结构(一)
由于我的nexus 6p手机耗电特别严重,基本上只能用半天,下载了android的源码,不能白下,所以想优化一下。编写了一个应用程序,这个应用程序使用了activitymanagerservice 的隐藏接口forceStopPackage,发现没有权限,通过配置systemuid,还是因为谷歌手机出厂的时候与aosp源码的签名不同,导致无法正常工作。想通过root权限,但是因为selinux的缘故,发现还是有问题,但是又不想关闭selinux。然后想试着更改services.odex直接push到手机中使用,但是将编译好的services.odex文件push到手机中,发现手机起不来了。通过对比手机原来的对应文件,发现只有四个字节不同,如下: 通过修改源代码,编译好services.odex,然后使用二进制编辑工具更改这四个字...Dec. 2, 2016, 9:27 p.m.作者:zachary分类:Android阅读(1632)评论(0)
Android与selinux
前两天写demo的时候碰到一个问题,一个app怎么才能访问proc目录的一个自己新建的节点,下面以/proc/zachary为例。通过把zachary文件访问权限设置为777,还是不能fopen(“/proc/zachary”,”w”),经过一番google,原来是selinux的关系。为了使得app能够访问上面的节点,需要几个步骤,记录下来给需要的同学。1、 获取进程的分类,以com.android.setting为例。将该应用启动,后通过ps –Z获取分类 可以看到这个进程的分类为system_app。2、在file.te中加入type zachary_file, fs_type;用于定义类型,zachary_file就是我们自定义的类型,查看file.te中,linux有很多的类型,包括fs_type, sysfs_type, dev_type, file_typ...Oct. 13, 2016, 1:08 p.m.作者:zachary分类:Android阅读(2135)评论(0)
Android 开发遇到的破事(三)
这两天公司来了个妹子,我刚好去她旁边有点事,突然被叫住说她的adb不能用了。我试了一下,果然adb shell和adb push等等都不能用了,现象就是卡死不动。这个问题我碰到过,将adb的进程干掉,直接输入>adb kill-server >adb start-server发现还是不行,一回车就不动了。看来是端口被占了。。。好看看到底是什么占了俺adb的端口(默认5037)>netstat /a /o|findstr 5037果然发现了一个,根据pid在任务管理器里面一找发现一个logs and alert的服务占了,这个服务干嘛的呀,为啥和adb抢端口用,直接到服务里面吧这个服务禁用掉,啊哈果然adb 正常了,搞定,妹子感谢了一番,俺自信的走了。一会espace发来一个消息,妹子说又不能用了。。。我一看还是原来的问题...June 30, 2016, 8:06 a.m.作者:zachary分类:Android阅读(1883)评论(0)
Android开发遇到的破事(二)
这篇要说的是Android system property,具体的原理这里就不说了,http://www.cnblogs.com/bastard/archive/2012/10/11/2720314.html 这篇文章以及相当的详细了。这里只说说具体的作用,还有碰到的坑。我们都知道,系统有很多的属性,这些属性很多通过property做永久化的保存,在android系统中可以通过adb shell getprop获得系统所有的property。我们可以使用这个作为特性的开关。昨天碰到的问题是在代码中发现SystemProperties.set("zachary")无效,但是SystemProperties.get("zachary")却可以获取从adb shell设置的值,奇怪了,我是在systemserver进程中操作的,应该不是权限的问题吧。从an...May 12, 2016, 8:26 a.m.作者:zachary分类:Android阅读(1917)评论(0)
Android6.0镜像编译烧机全过程
一、android代码下载在国内由于某墙的原因,不能直接下载google的代码,幸好清华大学有AOSP的镜像源。先搬出清华的地址:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/,与在android网站上下载源码一样,只是地址有点改变。1、下载 repo 工具:$mkdir ~/bin $PATH=~/bin:$PATH $curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $chmod a+x ~/bin/repo上面的地址可能下不下来,如果真不能下载,百度一个repo就好了,修改repo文件,设置REPO_URL如下: REPO_URL = ...March 17, 2016, 8:09 a.m.作者:zachary分类:Android阅读(2070)评论(0)
android反编译总结
java的反编译相对c/c++要简单一些,android程序是一个apk,实质是一个压缩包,通过简单的减压缩,就可以得到apk的资源文件,通过替换这些资源文件就可以简单的自定义程序的图标。废话不多说了,下面通过一个实例将android反编译的过程。 工欲善其事,必先利其器。反编译程序之前,首先需要一些工具。 1、apktool:反编译最重要的工具,可以将android apk反编译成smail语言,并可以将其编译回apk.下载地址 2、dex2jar:将dex文件转化为jar文件,这个工具需要与下面的工具配合使用,反编译出混淆后的源码。下载地址 3、jd-GUI...March 1, 2016, 8:15 a.m.作者:zachary分类:Android阅读(1538)评论(0)
Android开发遇到的破事(一)
在前几天做了一个demo,昨天升级了一下SDK,突然一下子就不能运行了,报了两个错。1、报了android.os.NetworkOnMainThreadException的异常,这个好说,百度一下,easy。原因:原来是在4.0之后在主线程里面执行Http请求都会报这个错解决办法:在启动的activity的onCreate函数添加以下代码:StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteO...Dec. 9, 2015, 9:54 p.m.作者:zachary分类:Android阅读(1658)评论(0)