Autore Topic: Signing di un apk come system app  (Letto 630 volte)

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Signing di un apk come system app
« il: 01 Agosto 2014, 14:55:03 CEST »
0
Oggi un mio collega stava trafficando con le system app, in quanto su un "Box" personalizzato un cliente vuole un sistema che autoaggiorna le applicazioni in maniera silent e senza conferma (lasciamo tutte le scelte stupide, insulse o inutili da parte, sappiamo tutti come funziona coi clienti...)
Ha guardato sul web e ha trovato che:
impostando il permesso nel manifest:
Codice: [Seleziona]
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />aggiungiendo nel root tag del manifest:
Codice (XML): [Seleziona]
android:sharedUserId="android.uid.system"
e Ovviamente con dispositivo rooted, è possibile installare un'app come app di sistema che può fare installazioni in maniera silent.
L'apk di questa app però va resignito utilizzando signapk.jar e specifici file di permission.
Visto che il collega ad ogni reinstallazione si rifaceva a mano il resign (da riga di comando) e installava a mano l'apk ogni volta, ho cercato di fare uno script gradle con le mie poche conoscenze (che fatica.. :D)

Vi chiedo quindi se, voi che ne sapete di piu (Ricky e Gabriele su tutti) vi pare uno script corretto o è una c***ata/si può far meglio...

Insomma, facciamo una discussione seria, a parte il senso di ottenere una cosa del genere, lo script vi pare ok? Non ho trovato niente sul web...

Codice (Java): [Seleziona]
applicationVariants.all { variant ->
        variant.assemble.doLast {
            println("************* RESIGNING APK **************************")
            File apkFile = getOutputFile()
            println("\t OutputFile: " + apkFile.getAbsolutePath());
            if (apkfile.exists()) {
                println("\t ***** File Exists **** ")
                String tmpFileName = apkFile.getParentFile().getPath() + '/tmp-system-apk.apk'
                println("\t\t Will sign temporary to: " + tmpFileName)
                javaexec {
                    main = '-jar';
                    args '../signapk/signapk.jar', '../signapk/platform.x509.pem', '../signapk/platform.pk8', apFfile.getPath(), tmpFileName
                }
                println("\t\t Deleting old apk...")
                apkFile.delete()
                File tmpFile = new File(tmpFileName);
                println("\t\t Renaming resigned apk....")
                tmpFile.renameTo(apkFile);
                println("************* PROCESS FINISHED *******************")
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia