Ответ 1
Вам нужно создать script, назовем его start_valgrind.sh
#!/system/bin/sh
PACKAGE="com.example.hellojni"
# Callgrind tool
#VGPARAMS='-v --error-limit=no --trace-children=yes --log-file=/sdcard/valgrind.log.%p --tool=callgrind --callgrind-out-file=/sdcard/callgrind.out.%p'
# Memcheck tool
VGPARAMS='-v --error-limit=no --trace-children=yes --log-file=/sdcard/valgrind.log.%p --tool=memcheck --leak-check=full --show-reachable=yes'
export TMPDIR=/data/data/$PACKAGE
exec /data/local/Inst/bin/valgrind $VGPARAMS $*
который должен быть скопирован на устройство.
Как только у вас есть script в файле start_valgrind.sh где-то в локальной файловой системе, вы можете просто использовать ниже script (позволяет называть его bootstrap_valgrind.sh), чтобы выполнить всю работу (копирует файл start_valgrind.sh script на телефон, запускает его, запускает ваше приложение через Valgrind).
#!/usr/bin/env bash
PACKAGE="com.example.hellojni"
adb push start_valgrind.sh /data/local/
adb shell chmod 777 /data/local/start_valgrind.sh
adb root
adb shell setprop wrap.$PACKAGE "logwrapper /data/local/start_valgrind.sh"
echo "wrap.$PACKAGE: $(adb shell getprop wrap.$PACKAGE)"
adb shell am force-stop $PACKAGE
adb shell am start -a android.intent.action.MAIN -n $PACKAGE/.HelloJni
adb logcat -c
adb logcat
exit 0
ПРЕДУПРЕЖДЕНИЕ. Убедитесь, что имя свойства, заданное с помощью setprop i.e. (wrap.com.yourcompany.yourapp), имеет длину менее 31 символа.
В противном случае вы получите сообщение об ошибке "невозможно установить свойство", потому что вы НЕ МОЖЕТЕ установить имя свойства с длиной больше 31, что является числом максимально допустимых символов в имени свойства.
Также значение свойства должно быть <= 91 символов: fooobar.com/questions/68701/...
Для создания Valgrind для Android (ARM) см. мой script отсюда: fooobar.com/questions/68703/...