Для целей моего проекта абсолютно необходимо иметь возможность перезаписать файл SO определенного приложения. который уже установлен на устройстве.
Файл, например /data/app/~~hU4TMUlqGWmn_lDTOca2fQ==/com.rockstargames.gtasa_x-jYaHvUmlwiQpOdGiFYR-9Q==/lib/arm/libGTASA.so
Я не знаю Я не хочу перекомпилировать APK и устанавливать его снова. Нужен быстрый способ изменить SO-файл.
У меня есть такой пакетный скрипт:
Код: Выделить всё
"adb.exe" shell "su -c 'rm %NATIVE_LIB_DIR%/libGTASA.so'"
"adb.exe" shell "su -c 'rm /data/local/tmp/update.so'"
"adb.exe" push -p "R:\Android plugin deployment solution\Android plugin deployment solution\bin\Release\deployment\GTA San Andreas\2.00\ANDROID_ARMEABI_V7A\modified_lib\libGTASA.so" "/data/local/tmp/update.so"
"adb.exe" shell "su -c 'chmod 555 /data/local/tmp/update.so'"
"adb.exe" shell "su -c 'chown system /data/local/tmp/update.so'"
"adb.exe" shell "su -c 'chown :system /data/local/tmp/update.so'"
"adb.exe" shell "su -c 'cp -p /data/local/tmp/update.so %NATIVE_LIB_DIR%/libGTASA.so'"
Теперь в Android 13 при копировании файла в «lib» отказано в разрешении. каталог приложения.
К моему удивлению, в одном случае он все еще работает — если установленное приложение имеет только схему подписи v1, а не другую схему подписи.
Проверено на двух телефонах Xiaomi, оба на Android. 13, та же проблема.
Код: Выделить всё
R:\>for /F "delims=" %a in ('""adb.exe" ""shell dumpsys package com.rockstargames.gtasa_x ^| grep legacyNativeLibraryDir ^| cut -d'=' -f2-"') do @set NATIVE_LIB_DIR=%a/arm
R:\>"adb.exe" shell "su -c 'rm /data/app/~~hU4TMUlqGWmn_lDTOca2fQ==/com.rockstargames.gtasa_x-jYaHvUmlwiQpOdGiFYR-9Q==/lib/arm/libGTASA.so'"
rm: /data/app/~~hU4TMUlqGWmn_lDTOca2fQ==/com.rockstargames.gtasa_x-jYaHvUmlwiQpOdGiFYR-9Q==/lib/arm/libGTASA.so: No such file or directory
R:\>"adb.exe" shell "su -c 'rm /data/local/tmp/update.so'"
R:\>"adb.exe" push -p "R:\Android plugin deployment solution\Android plugin deployment solution\bin\Release\deployment\GTA San Andreas\2.00\ANDROID_ARMEABI_V7A\modified_lib\libGTASA.so" "/data/local/tmp/update.so"
R:\And...libGTASA.so pushed, 0 skipped. 118.3 MB/s (11707712 bytes in 0.094s)
R:\>"adb.exe" shell "su -c 'chmod 555 /data/local/tmp/update.so'"
R:\>"adb.exe" shell "su -c 'chown system /data/local/tmp/update.so'"
R:\>"adb.exe" shell "su -c 'chown :system /data/local/tmp/update.so'"
R:\>"adb.exe" shell "su -c 'cp -p /data/local/tmp/update.so /data/app/~~hU4TMUlqGWmn_lDTOca2fQ==/com.rockstargames.gtasa_x-jYaHvUmlwiQpOdGiFYR-9Q==/lib/arm/libGTASA.so'"
cp: /data/app/~~hU4TMUlqGWmn_lDTOca2fQ==/com.rockstargames.gtasa_x-jYaHvUmlwiQpOdGiFYR-9Q==/lib/arm/libGTASA.so: Permission denied
У меня отключен SELinux (setenforce 0), но это не решает проблему.
Да кто-нибудь знает, в чем именно причина этого «Отказано в разрешении»?
Подробнее здесь: https://stackoverflow.com/questions/793 ... an-applica