Обновление системного приложения Android 8 вступает в силу только после перезагрузки - PullRequest
0 голосов
/ 22 октября 2019

TL; DR : при обновлении системных приложений на Android обновленное приложение запускается только после перезагрузки.

Я занимаюсь разработкой пользовательского ПЗУ на основе Android 8.1.2 для пользовательскогоУстройство на базе Rockchip RK3126c. Я взял исходный код AOSP у производителя платы, изменил только ключ платформы и добавил два пользовательских приложения в качестве системных приложений;один является привилегированным (общий system пользователь), а другой нет, т. е. первый находится в /system/priv-app и подписан ключом платформы, а второй - в /system/app и подписан собственным ключом.

Оба приложения работают, но когда я пытаюсь обновить любое из двух (через adb shell pm install -r ... или через Android Studio), обновление не вступает в силу;старая версия все еще работает, даже после уничтожения (adb shell kill -9 ... или выброса исключения нулевого указателя) и перезапуска. Новая версия запускается только после полной перезагрузки. Я увеличил versionCode. Перед перезагрузкой getPackageManager().getPackageInfo(...).versionCode возвращает новый номер версии, а BuildConfig.VERSION_CODE - старый. Это относится как к eng, так и к user сборкам.

При обновлении adb logcat показывает:

10-17 15:45:19.706  1048  1048 D AndroidRuntime: Calling main entry com.android.commands.pm.Pm
10-17 15:45:19.725  1058  1058 E asset   : setgid: Operation not permitted
10-17 15:45:22.563   336   362 I ActivityManager: Start proc 1062:com.android.defcontainer/u0a11 for service com.android.defcontainer/.DefaultContainerService
10-17 15:45:22.617  1062  1062 I zygote  : The ClassLoaderContext is a special shared library.
10-17 15:45:22.739   336   362 I chatty  : uid=1000(system) PackageManager expire 1 line
10-17 15:45:22.820  1077  1077 I dex2oat : /system/bin/dex2oat --input-vdex-fd=-1 --output-vdex-fd=14 --compiler-filter=quicken --classpath-dir=/data/app/com.example.myapp-cdF84NESHVxl5UTZHVbRdg== --class-loader-context=PCL[]
10-17 15:45:22.832  1077  1077 W dex2oat : Could not reserve sentinel fault page
10-17 15:45:26.117  1077  1080 W dex2oat : Verification of boolean ao0.a(java.lang.String, long) took 130.568ms
10-17 15:45:28.960  1077  1077 I dex2oat : dex2oat took 6.142s (10.744s cpu) (threads: 4) arena alloc=17KB (17568B) java alloc=4MB (4274432B) native alloc=6MB (6543768B) free=1801KB (1844840B)
10-17 15:45:28.997   336   350 I ActivityManager: Force stopping com.example.myapp appid=1000 user=-1: installPackageLI
10-17 15:45:29.009   336   362 W PackageManager: Trying to update system app code path from /system/priv-app/MyApp to /data/app/MyApp-cdF84NESHVxl5UTZHVbRdg==
10-17 15:45:29.010   336   362 W PackageManager: Code path for com.example.myapp changing from /system/priv-app/MyApp to /data/app/MyApp-cdF84NESHVxl5UTZHVbRdg==
10-17 15:45:29.010   336   362 W PackageManager: Resource path com.example.myapp changing from /system/priv-app/MyApp to /data/app/MyApp-cdF84NESHVxl5UTZHVbRdg==
10-17 15:45:29.205   242   242 E         : Couldn't opendir /data/app/vmdl1968223466.tmp: No such file or directory
10-17 15:45:29.205   242   242 E installd: Failed to delete /data/app/vmdl1968223466.tmp: No such file or directory
10-17 15:45:29.213   336   362 I ActivityManager: Force stopping com.example.myapp appid=1000 user=0: pkg removed
10-17 15:45:29.214  1048  1048 I Pm      : Package com.example.myapp installed in 9500 ms
10-17 15:45:29.239  1048  1048 I app_process: System.exit called, status: 0
10-17 15:45:29.239  1048  1048 I AndroidRuntime: VM exiting with result code 0.

После перезагрузки дальнейшие обновления приложения do работа - очевидно, проблема существует только при изменении пути к коду с /system/[priv-]app на /data/app, но не при том, что путь уже /data/app.

То же самое хорошо работало на Android 7.1. 2. Глубоко в среде Android, вероятно, есть некоторый кеш для путей кода приложений, который не обновляется после перезаписи приложения. Кто-нибудь знает, где это находится и как решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...