【问题标题】:Android Wrap Shell Script Doesn't Work as ExpectedAndroid Wrap Shell 脚本无法按预期工作
【发布时间】:2019-05-27 16:21:49
【问题描述】:

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

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

我编写了我的 wrap 脚本,它只包含以下行(我什至还没有添加 malloc 调试选项):

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

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

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

我注意到 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

我曾尝试使用非 root 的 android 8.1 设备 Android Pie,甚至在 Android Q 上使用 Pixel,但结果是一样的。我试图移动到模拟器,但无济于事,它失败了,结果相同。我曾尝试使用 NDK 17c 和 NDK 19,两者都产生了相同的结果。我正在开发 Windows,如果这可能相关的话。

感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

    在尝试了各种替代方案后,发现问题是因为 windows(我的工作站)和 linux(android 设备)之间的 EOL 格式不同。在将我的 wrap.sh 文件 EOL 从 Windows (CR LF) 转换为 Unix EOL 格式 (LF) 后,我设法让它运行。

    【讨论】:

      猜你喜欢
      • 2014-05-07
      • 2019-06-16
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      • 2021-12-20
      • 1970-01-01
      相关资源
      最近更新 更多