在调查在本机代码中遇到断点的问题时,我决定检查ndk-gdb是否正常工作。我删除了app_process,启动了Java调试并运行ndk-gdb --force
。猜猜看,没有创建app_process。 ndk-gdb --verbose
输出有这一行:
## COMMAND: adb_cmd pull /system/bin/app_process obj/local/armeabi-v7a/app_process
remote object '/system/bin/app_process' not a file or directory
Pulled app_process from device/emulator.
我已从目标设备上卸载了该应用,重启了设备并重复了。仍然没有app_process。所以,我想知道这里的问题是什么,我也想知道这个文件是什么时候创建的,以及什么进程/脚本。
答案 0 :(得分:5)
如前所述,Android 5.0将/system/bin/app_process
作为/system/bin/app_process32
的符号链接。由于无法使用adb pull
提取符号链接,因此ndk-gdb
脚本无法按原样运行。
按如下方式更改ndk-gdb
以支持api21更改以及<的向后兼容性api21:
# Get the app_server binary from the device
APP_PROCESS=$APP_OUT/app_process
if [ "$API_LEVEL" -lt "21" ] ; then
run adb_cmd pull /system/bin/app_process `native_path $APP_PROCESS`
log "Pulled app_process from device/emulator to $APP_PROCESS"
else
run adb_cmd pull /system/bin/app_process32 `native_path $APP_PROCESS`
log "Pulled app_process32 from device/emulator to $APP_PROCESS"
fi
编辑:或:
# Get the app_server binary from the device
APP_PROCESS=$APP_OUT/app_process
APP_PROCESS_DEVICE=app_process32
if [ "$API_LEVEL" -lt "21" ] ; then
APP_PROCESS_DEVICE=app_process
fi
run adb_cmd pull /system/bin/$APP_PROCESS_DEVICE `native_path $APP_PROCESS`
log "Pulled $APP_PROCESS_DEVICE from device/emulator to $APP_PROCESS"
原始变更也在这里:http://pastebin.com/YfxNs06U。请注意,当将此更改提取到开发计算机以支持在Eclipse中使用单个调试配置时,此更改会将app_process32
重命名为app_process
。
答案 1 :(得分:1)
发现问题。我的设备正在运行Android 5.0预览,而app_process有一个名为app_process32的文件的符号链接。所以拉app_process32工作正常。
答案 2 :(得分:0)
除了Violet Giraffe的回答,在脚本ndk-gdb中交换行
run adb_cmd pull /system/bin/app_process `native_path $APP_PROCESS`
带
run adb_cmd pull /system/bin/app_process32 `native_path $APP_PROCESS`
这解决了Android 5.0问题的问题,我能够像以前一样构建和调试。