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 ?