2 votes

La signature avec le certificat de plate-forme révoque WRITE_EXTERNAL_STORAGE

Suivant cette discussion J'ai signé une application système sur laquelle je travaille en utilisant les certificats de plate-forme propriétaires d'un appareil spécifique que j'ai reçus du fabricant. Je l'ai signée comme suit :

java -jar out/host/linux-x86/framework/signapk.jar \
     build/target/product/security/platform.x509.pem \
     build/target/product/security/platform.pk8 \
     Launcher-unsigned.apk \
     Launcher-unsigned.apk
zipalign -f 4 Launcher-signed.apk Launcher.apk

Mon lanceur a différentes permissions :

<uses-permission 
    android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
[snip]
<uses-permission
    android:name="android.permission.SET_PREFERRED_APPLICATIONS"
    tools:ignore="ProtectedPermissons" />

Et je l'ai inclus dans le manifeste :

<manifest [...]
    android:sharedUserId="android.uid.system" >

Alors qu'auparavant mon application réussissait à écrire sur la carte SD, mais ne parvenait pas à définir une application préférée ( mon code ressemble à ceci ), il ne provoque plus d'exception de sécurité, mais l'écriture sur la carte SD provoque une exception FileNotFoundException avec un message indiquant que l'autorisation a été refusée.

Comment se fait-il que mon application obtienne certaines autorisations protégées, mais en perde d'autres ?

4voto

Paul Lammertsma Points 12817

Ricardo Cerqueira (développeur CyanogenMod) a eu la gentillesse de me répondre en privé via Google+ :

L'utilisateur du système, de par sa conception, ne peut PAS écrire sur le stockage externe. C'est en fait le seul utilisateur à qui il est interdit de le faire. le seul utilisateur à qui cela est interdit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X