Android Wrap Shell脚本无法按预期工作

时间:2019-05-24 09:42:17

标签: android c++ android-ndk java-native-interface

我有一个C库要与我的项目集成,但是在工作时,出现了堆栈损坏错误。我决定对我的情况进行malloc调试可能会有所帮助,但似乎无法正确配置它。

我尝试按照本教程进行操作:https://developer.android.com/ndk/guides/wrap-script

我写了我的包装脚本,其中仅包含以下行(我什至没有添加malloc调试选项):

#!/system/bin/sh
exec "$@"

我将脚本放在默认的resources/lib/{arch}文件夹中,并验证了该脚本确实已正确打包到lib文件夹中的apk中。

但是在启动应用程序时,它似乎卡住了,只是显示了一个空白屏幕(我已经验证了该应用程序在没有包装外壳脚本的情况下是否可以正常工作,至少直到发生堆栈损坏为止)。

我注意到logcat打印以下行:

2019-05-24 16:35:00.524 1927-1942/? W/ActivityManager: Launch timeout has expired, giving up wake lock!
2019-05-24 16:35:00.680 1927-1942/? W/ActivityManager: Process ProcessRecord{e1f6d50 6975:my.package.name/u0a85} failed to attach
2019-05-24 16:35:00.681 1927-1942/? I/ActivityManager: Killing 6975:my.package.name/u0a85 (adj -10000): start time

即使在Android Q上使用Pixel,我也曾尝试使用非root用户的android 8.1设备Android Pie,但结果是相同的。我尝试转向仿真器,但无济于事,它以相同的结果失败。我曾尝试同时使用NDK 17c和NDK 19,两者均产生了相同的结果。如果可能的话,我正在Windows上工作。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

尝试了各种替代方法后,发现问题是由于Windows(我的工作站)和Linux(Android设备)之间的EOL格式不同而发生的。将我的wrap.sh文件EOL从Windows(CR LF)转换为Unix EOL格式(LF)之后,我设法使其运行。