android 交叉编译so,Android交叉编译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:
$./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
總結
以上是生活随笔為你收集整理的android 交叉编译so,Android交叉编译htop和使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 团队开发git使用各种问题
 - 下一篇: 程序员的浪漫