分类: Android平台
2016-06-17 23:39:20
直接下载附件吧Android交叉编译htop和使用方法.docx
1、什么是htop
htop来源于top,top是Unix/linux下功能强大的性能检测工具之一,用于实时检测并统计进程的属性和状态,基于ncurses库,可上显示文字界面。但是top已经非常陈旧,不支持鼠标点击操作,不支持查看进程的各个子线程的信息(对于我来说,这个非常重要,有助于分析代码的效率并优化),不支持color显示,易用性较差(曾有人提出改进top但未被接受)。htop官网对htop和top的比较:
2、htop源码下载
网站首页:
源码下载:git clone
GitHub地址:
目前最新版本是2.0.1,次之2.0.0,再次之1.0.3
3、使用ndk进行交叉编译
3.1 下载ndk,不同的Android版本有不同的ndk,4.4使用的是android-ndk-r9b-linux-x86_64.tar.bz2();android 5.0的NDK下载地址()
3.2 解压android-ndk-r9b-linux-x86_64.tar.bz2,并安装交叉编译工具,安装之后,就按照正常的linux交叉编译流程操作就可以了
$./make-standalone-toolchain.sh --arch=arm --ndk-dir=/home/klaus/tools/android-ndk-r9b --system=linux-x86_64 --install-dir=/home/klaus/tools/android-ndk-r9b --platform=android-19
这样就将交叉编译工具安装到/home/klaus/tools/android-ndk-r9b
3.3 交叉编译ncurses
htop编译时,必须有ncurses库的支持,所以编译htop之前,必须先编译ncurses。
下载ncurses:
官网:http://ftp.gnu.org/gnu/ncurses/
最细版本地址:http://ftp.gnu.org/gnu/ncurses/ncurses-6.0.tar.gz
$./configure CC=arm-linux-androideabi-gcc-4.6 --prefix=$PWD/system --host=arm-linux-androideabi --with-shared CPPFLAGS=-I/home/klaus/tools/android-ndk-r9b/sysroot/usr/include
$ make && make install
note:
a、出现下图错误
修改
b、出现下图错误
执行:
$make clean
$./configure CC=arm-linux-androideabi-gcc-4.6 --prefix=$PWD/system --host=arm-linux-androideabi --with-shared CPPFLAGS=-I/home/klaus/tools/android-ndk-r9b/sysroot/usr/include
如果还有这个错误,重启一下机器
3.4、交叉编译htop2.0.1版本
klaus@server:~/tools/htop-2.0.1$ ./autogen.sh
klaus@server:~/tools/htop-2.0.1$ ./configure --prefix=/home/klaus/tools/htop-2.0.1/system --host=arm --bindir=/home/klaus/tools/htop-2.0.1/system/xbin --with-sysroot=/home/klaus/tools/android-ndk-r9b/sysroot CC=arm-linux-androideabi-gcc-4.6 CFLAGS="-I/home/klaus/tools/ncurses-6.0/system/include -I/home/klaus/tools/ncurses-6.0/system/include/ncurses -I/home/klaus/tools/android-ndk-r9b/sources/android/support/include" LDFLAGS=-L/home/klaus/tools/ncurses-6.0/system/lib --disable-unicode
出现以下错误:
是由于configure文件在检查libncurses库时出现了问题,分析configure.ac文件发现如下:
在disable-unicode时,检查libncurses6.so库。此时我们查看以下我们交叉编译之后的ncurses的install目录是否有libncurses6.so文件
很显然是没有的,所以我们需要建立一个软连接;
然后进入htop2.0.1,再次执行configure配置命令,然后编译、安装
如果编译时出现以下错误:
此时按照下图执行:
注释掉HAVE_LINUX_AFFINITY即可编译通过
至此,htop编译成功,
3.4.1、将编译好的文件拷贝到Android设备上去运行
使用adb通过usb进入Android设备的shell
将编译好的ncurses和htop拷贝到system目录下,由于Android的system目录是只读的,需要remount
我是在windows下开发的,从linux主机上拷贝到Android设备,需要借助window,而window对目录是不区分大小写的,所以需要对linux上的内容进行压缩,然后在Android上解压。
拷贝文件到Android
由于data目录下有system目录,为了不影响system,另外建立了一个目录cmd_htop,用于解压
拷贝htop应用程序及相关文件到/system
此时可以执行htop命令,但是会有错误:
需要执行环境变量如下:
执行htop命令,如下
以上红色部分就是htop的执行效果,至此htop2.0.1移植到Android成功。
3.5、交叉编译htop1.0.3版本
编译和2.0.1的版本差不多,
klaus@server:~/tools/htop-1.0.3$ ./configure --prefix=/home/klaus/tools/htop-1.0.3/system --host=arm --bindir=/home/klaus/tools/htop-1.0.3/system/xbin --with-sysroot=/home/klaus/tools/android-ndk-r9b/sysroot CC=arm-linux-androideabi-gcc-4.6 CFLAGS="-I/home/klaus/tools/ncurses-6.0/system/include -I/home/klaus/tools/ncurses-6.0/system/include/ncurses" LDFLAGS=-L/home/klaus/tools/ncurses-6.0/system/lib --disable-unicode
如果编译出现以下错误:
按照下面的执行:
增加#include
make编译出现以下错误时:
执行以下操作:
注释掉HAVE_NATIVE_AFFINITY,增加
#define SYS_ioprio_get __NR_ioprio_get
#define SYS_ioprio_set __NR_ioprio_set
然后再编译
然后将压缩安装目录system为system1.0.3.tar.gz
将system1.0.3.tar.gz 拷贝到Android下
4、使用方法
详细应用请man htop查阅。
选择某一进程,按s:用strace追踪进程的系统调用
P、T、M和top下是一样的,按CPU,Time+、Memory使用排序。
下面有F1~F10的功能和对应的字母快捷键。
Shortcut Key |
Function Key |
Description |
h |
F1 |
Invoke htop Help |
S |
F2 |
Htop Setup Menu |
/ |
F3 |
Search for a Process |
I |
F4 |
Invert Sort Order |
t |
F5 |
Tree View |
> |
F6 |
Sort by a column |
[ |
F7 |
Nice - (change priority) |
] |
F8 |
Nice + (change priority) |
k |
F9 |
Kill a Process |
q |
F10 |
Quit htop |