炸蝦碎碎念。

[Notes, GNU/Linux, Open Source, Ruby on Rails, Computer Science, Archlinux]

[Android] Building and Running Apitrace for Android

前言

這個暑假參加了VMFive Lab,用到了apitrace這個神奇的工具。可以trace各種graphics API,比如說OpenGL、OpenGL ES、DirectX等等。會紀錄下來所有的texture、state還有call了哪些function、加了哪些parameter。也有replay的功能,也就是render一次trace的內容。雖然有支援在Android上trace,但是官方的文件沒有很齊全,甚至照著做是不會動,研究了好幾天終於跑起來,就紀錄一下。

Apitrace on Github

準備工作

首先,要有一個root過的手機,我這裡是直接用android emulator啦,預設好像是用4.4(API 19),我這裡是用x86的模擬器測試。

Build

1
2
3
4
5
6
7
8
9
$ git clone https://github.com/apitrace/apitrace.git
$ cd apitrace
$ mkdir build
$ cmake -H. -Bbuild -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain/android.toolchain.cmake -DANDROID_NDK=/home/joshua5201/Android/ndk/ -DANDROID_STL=gnustl_shared -DANDROID_SDK=/home/joshua5201/Android/sdk/ -DANDROID_ABI=x86 -DENABLE_STATIC_SNAPPY=true # 自己改成你的sdk還有ndk的path

$ make -C build -j4
$ make -C build -j4 retraceAPK
$ make -C buid -j4 installRetraceAPK
$ ./adb push /home/joshua5201/Repos/apitrace/libs/x86/egltrace.so /data/egltrace.so

Trace on Android 4.4

官方的文件是用com.android.setting測試,也就是設定的那個界面啦。其他的app執行的時候,好像都要包含activity的名稱,可以透過android sdk build-tools裡的aapt dump badging [apk name],至於apk可以在android系統中找到。

1
2
3
4
5
6
7
8
9
10
11
$ adb root
$ adb shell
sdk-linux/ -DANDROID_ABI=x86 -DENABLE_STATIC_SNAPPY=true

$ make -C build -j4
$ make -C build -j4 retraceAPK
$ make -C buid -j4 installRetraceAPK
$ ln -s /data/data/apitrace.github.io.eglretrace/libgnustl.so /data/libgnustl.so
$ setprop wrap.com.android.calculator2 LD_PRELOAD="/data/libgnustl_shared.so:/data/egltrace.so"
$ setprop debug.apitrace.procname com.android.calculator2
$ am start -S com.android.calculator2/com.android.calculator2.Calculator

然後我就發現了神秘的事情,會說找不到/data/data/app/com.android.calculator,所以就把這個資料夾建起來,再trace看看,就會發現trace生成的檔案了。am start之後就會看到你跑的app打開來了,就隨便按一按,然後用返回鍵關掉他。

Replay

1
2
$ adb pull /data/data/com.android.calculator/com.android.calculator.trace
$ apitrace replay com.android.calculator.trace --debug # 我不知道為什麼不加debug就會錯。

Comments