Android :par programme de copier l'apk dans /system/app
-
12-12-2019 - |
Question
Je suis en train d'installer un système d'application à partir de mon code java, et jusqu'à présent, je n'ai pas eu de succès.
Voici ce que j'ai fait jusqu'à présent:
- Mon appareil est enracinée.
- Mon "programme d'installation" app est installé comme une application système.(copié manuellement dans /system/app)
- J'ai signé le programme d'installation de l'apk avec plate-forme de clé, et j'ai
android:sharedUserId="android.uid.system"
dans le Manifeste. J'ai essayé (et d'essayer, et puis un peu plus) pour
Runtime.getRuntime.exec("su")
.J'ai l'intention de monter la partition système commerw
, faire uncat
pour l'apk, et puis faire de la partition systèmero
.Voici la liste des commandes:mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system<br> cat /sdcard/application.apk > /system/app/application.apk<br> mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system<br><br>The application.apk here is the app being installed from the installer app. This app is also signed with platform key, and has the sharedUserId configured.
- J'ai demandé pour la
INSTALL_PACKAGES
autorisation dans le manifeste.
J'ai essayé un certain nombre de variations de l'exec("") format, y compris à l'aide de 'su -c'
avec chaque commande.J'ai obtenu le bris de Tuyau d'exception et l'exception de Sécurité.Parfois, je ne suis pas une exception, mais le fichier n'est pas copié.
S'il vous plaît laissez-moi savoir ce que je suis en manque ici.Quelqu'un a eu ce travail?
Merci!
La solution
J'ai continué à creuser, et voici les résultats:
- Android a cette case dans la ligue.c:["racine de source android"/system/extras/su/su.c]
/* Until we have something better, only root and the shell can use su.*/ myuid = getuid(); if (myuid != AID_ROOT && myuid != AID_SHELL) { fprintf(stderr,"su: uid %d not allowed to su\n", myuid); return 1; }
ChainsDD (super-Utilisateur) et cyanogen mod contourner ce problème par la mise en œuvre de leur propre ligue.c: https://github.com/CyanogenMod/android_system_su/blob/master/su.c
Ce qui est spécial au sujet de
/system/app
?Il semble que c'est le fait que la partition est en lecture seule sur la non-enracinée appareils, de la prévention de la modification/désinstaller des applications y mettre. https://android.stackexchange.com/questions/17871/what-are-the-differences-between-a-system-app-and-user-appUne application signée avec plate-forme de clé et avec
sharedUserId = system
est "suffisamment bonne" pour mes fins, je n'ai pas spécialement de le copier dans /system/app.
Je suis de l'acceptation de cette réponse pour l'instant.