Android 5.0 / Lollipop: Forcer la rescan de / system / priv-app
Dans Android 4.x, c'en était assez pour mettre un APK fichier dans /system/priv-app, et le package-manager reconnu que le nouveau fichier et de l'onu (un-)installer l'application correspondante ou d'un service.
Depuis Android L, il semble ne suffit pas de placer le fichier dans ce répertoire - un redémarrage du système est nécessaire pour forcer l'Android de reconnaître que le changement.
Quelqu'un a une idée de comment contourner cela? Peut-être qu'avec tout setprop ctl.restart xxx
ou en tuant un service dédié?
EDIT:
Voici quelques journaux de logcat:
1. Déplacer APK de /system /system/priv-app (=installation)
su
mount -o remount rw /system
cd /system/priv-app
mv ../AARSCService.apk . //move from /system to /system/priv-app
W/mv ( 3268): type=1400 audit(0.0:53): avc: denied { rename } for name="AARSCService.apk" dev="mmcblk0p22" ino=23041 scontext=u:r:init:s0 tcontext=u:object_r:system_file:s0 tclass=file
(mais le fichier A été déplacé par le courant de la racine-mise en œuvre pour la Nexus 7 Android Android L P2 désactive SELinux pour la racine-commandes!)
-> APK n'est PAS chargé et ne figure pas dans la app-liste -> PAS comme prévu, APK va être installé automatiquement une fois mis en priv-dossier app sur Android 4.4.
2. Redémarrer l'appareil, ayant APK dans /system/priv-app
reboot
I/PackageManager( 567): /system/priv-app/AARSCService.apk changed; collecting certs
-> APK EST chargé et répertorié dans la app-liste -> comme prévu
3. Déplacer APK de /system/priv-app /system (=désinstallation)
su
mount -o remount rw /system
cd /system/priv-app
mv AARSCService.apk .. //move from /system/priv-app to /system
W/mv ( 3189): type=1400 audit(0.0:31): avc: denied { rename } for name="AARSCService.apk" dev="mmcblk0p22" ino=23041 scontext=u:r:init:s0 tcontext=u:object_r:system_file:s0 tclass=file
(mais le fichier A été déplacé par le courant de la racine-mise en œuvre pour la Nexus 7 Android Android L P2 désactive SELinux pour la racine-commandes!)
-> APK toujours chargé et énumérées à l'intérieur de l'app-liste, à l'intérieur d'application peut encore être lié à partir d'une autre application -> PAS comme prévu, APK va être désinstallés automatiquement une fois retiré de priv-dossier app sur Android 4.4.
4. Redémarrer l'appareil, ayant APK PAS à l'intérieur de /system/priv-app
reboot
W/PackageManager( 570): System package eu.airaudio.aarscservice no longer exists; wiping its data
-> APK n'est pas plus chargé et plus inscrites dans l'app-liste -> comme prévu
EDIT 2:
Il y a le même comportement non racinées Android L (21) de l'émulateur - sûr, sans SELinux-avertissement.
Mais l'APK est également juste de l'onu (un-)installé après le redémarrage (=tuer zygote).
source d'informationauteur Martin L.
Vous devez vous connecter pour publier un commentaire.
Comparer le code source de
PackageManagerService
entre KitKat et Lollipop, vous pouvez voir des changements significatifs, et d'autres qui sont de toute évidence liées à ce changement.PackageManagerService.java
sur LollipopPackageManagerService.java
sur KitKatLe changement le plus important de la question, le sujet est la suppression de toutes les références à
AppDirObserver
(une classe imbriquée dePackageManagerService
) qui a été initialisé pour surveiller tous les répertoires (l'image jointe montre une comparaison du code où il a été utilisé. Côté droit montre KitKat code et le côté gauche montre Sucette)N'ai pas encore trouvé une solution pour cela, mais peut aider quelqu'un à comprendre.
Basé sur votre logcat messages, ressemble à la
PackageManagerService
est pas de même de voir le dossier/fichier changements.Ici est une façon de contourner/déclencheur d'analyser, de simuler un "démarrage d'achèvement" de l'événement avec la diffusion d'action:
Ce qui devrait déclencher une nouvelle analyse par le
PackageManagerService
pms va scanner
/system/app(priv-app)
au départ. alors il suffit de tuer le processussystemserver
🙂il travail à ma sucette émulateur. il suffit de prendre un peu de temps pour faire preuve de "mise à niveau android, optez app..."
Extrait de:
J'ai eu exactement le même problème.
S'avère quand j'ai fait le paquet retourné priv-app il a été copié avec d'autorisation différents
Les autorisations de tous les paquets dans priv-app (et application) :
L'autorisation de l'emballage, j'ai copié le dos :
Un simple
chmod -R a+rw <path/to/package>
résolu le problèmeEDIT:
Assurez-vous que votre système //n'est pas en lecture seule par l'émission d'
mount -o remount,rw /system/