Скрипт оболочки для Android не работает должным образом - PullRequest
1 голос
/ 24 мая 2019

У меня есть библиотека C для интеграции с моим проектом, но после работы я получил ошибку повреждения стека.Я решил, что отладка malloc может помочь в моем случае, но, похоже, не могу правильно ее настроить.

Я пытался следовать этому руководству: https://developer.android.com/ndk/guides/wrap-script

Я написал свой сценарий переноса, который просто содержит следующую строку (я даже не добавляю опции отладки malloc):

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

Я поместил скрипт в папку resources/lib/{arch} по умолчанию и проверил, что он действительно правильно упакованв apk в папке lib.

Но после запуска приложения оно зависло и просто показало пустой белый экран (я убедился, что приложение работает нормально без сценария оболочки-оболочки, по крайней мере, допроизошло повреждение стека).

Я заметил, что 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 8.1, Android Pie, даже с Pixel на Android Q, но результаттот же самый.Я пытался перейти на эмулятор, но безрезультатно, не получилось с тем же результатом.Я пытался использовать NDK 17c и NDK 19, оба дали один и тот же результат.Я работаю над Windows, если это может иметь отношение.

Любая помощь приветствуется.

1 Ответ

1 голос
/ 27 мая 2019

После того, как попробовали различные альтернативы, оказалось, что проблема возникла из-за разного формата EOL между windows (моя рабочая станция) и linux (устройство android).После преобразования моего файла wrap.sh EOL из Windows (CR LF) в формат Unix EOL (LF) мне удалось запустить его.

...