2012-05-16 20 views
12

causa this annoying Android limitation ho bisogno utenti di reinstallare il mio applicazione in modo manifesto i permessi vengono rilevati da altre applicazioni.Reinstallare applicazione apk di programmazione senza scaricare

Questo è già frustrante per l'utente, ma in più, non riesco a vedere un modo per reinstallare la mia applicazione dall'apk memorizzato in/data/app e quindi dovrei scaricare la stessa versione nello spazio di archiviazione card prima di attivare la solita intenzione di installazione.

Attendo con impazienza qualcuno che mi dice che mi manca qualcosa di ovvio! Ho disegnato uno spazio vuoto ...

Grazie in anticipo.

Si prega di aggiungere il problema se si desidera vederlo risolto! Saluti.


EDIT: Con i commenti di @hackbod in mente, è possibile utilizzare il seguente codice per avviare la finestra di installazione.

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(new File(this.getApplicationInfo().sourceDir)), 
"application/vnd.android.package-archive"); 
startActivity(intent); 

sul mio dispositivo Jelly Bean, questa presenta due opzioni: installatore pacchetto e Verificare e installare. Non so se quest'ultimo si occuperà della questione del:

  • Installazione applicazioni in questo modo sarà probabilmente rimuovere la proprietà di esso dal Play Store

La mia applicazione è gratuita, così non riesco a testare l'emissione a pagamento di:

  • Nota se la vostra applicazione è in avanti bloccato (che è inevitabile per tutte le applicazioni a pagamento che iniziano con JB, a causa della crittografia app), allora questo non funzionerà becau se il vostro eseguibile applicazione non è leggibile da altri

Sebbene finiture hackbod con 'leggibile da altri', che suggerisce che se si sta eseguendo questo attraverso il proprio codice, per la propria applicazione, è leggibile? Per favore, correggimi se puoi testarlo e ho torto.

+1

Potrebbe essere possibile copiarlo da/data/app alla scheda di memoria. Sebbene non sia possibile navigare in quella directory, i file in esso contenuti sono solitamente leggibili, anche se ciò non è garantito (e comunque non è sempre la posizione di installazione). Un'alternativa potrebbe essere quella di non utilizzare il sistema di autorizzazione, ma provare a fare la propria autenticazione del pacchetto richiedente. –

+0

Grazie Chris - La mia applicazione deve essere installata sul dispositivo altrimenti non funzionerà correttamente, quindi ho delle preoccupazioni minime riguardo al percorso di installazione dell'utente. Suppongo che sia l'unica considerazione a cui ti riferivi? Inoltre, dato che/data/app è leggibile, potrei controllare che l'apk si trovasse lì prima di qualsiasi altra cosa. Dalla mia ricerca, non riesco a trovare un modo per trasferire l'apk da quella posizione a meno che non usi le funzioni di root ... Mi piacerebbe sapere se c'è un modo ... Non sono sicuro di cosa intendessi con la mia 'autenticazione personale'? Saluti. – brandall

+0

Se è leggibile (come di solito è) non hai bisogno di root per copiarlo in un posto a cui sei autorizzato a scrivere (come la sdcard, con l'autorizzazione manifest appropriata). Tuttavia,/data/app non è sempre dove viene installato. E a volte il nome del file apk viene cambiato durante l'installazione. Potresti essere in grado di determinare la posizione e il nome installato da /data/system/packages.xml ma a quel punto sei abbastanza in profondità nelle funzionalità interne private che potrebbero non essere a prova di futuro. In realtà, il re-download è probabilmente la scelta migliore, almeno per avere un'opzione di fallback. –

risposta

3

È plausibile che si possa semplicemente ottenere il percorso del proprio .apk tramite Context.getApplicationInfo(). SourceDir e avviare il programma di installazione dell'app con quel percorso. Tuttavia, se la tua app è bloccata in avanti (il che è inevitabile per tutte le applicazioni a pagamento che iniziano con JB, a causa della crittografia dell'app), questo non funzionerà perché il tuo eseguibile dell'app non è leggibile da altri. In tal caso dovresti copiare il file .apk in un luogo leggibile da un mondo (come nella memoria esterna) e installarlo da lì.

Non importa quello che fai qui, però, questo ha alcuni inevitabili conseguenze molto negative:

  • L'unico modo per fare qualsiasi tipo di installazione dalla tua app è di passare attraverso l'interfaccia utente lato-caricamento, che (a) sarà un'esperienza molto spaventosa per l'utente e (b) richiederà all'utente di attivare il caricamento laterale per poter procedere.
  • L'installazione dell'app in questo modo probabilmente ne rimuoverà la proprietà dal Play Store (poiché non è più quella che l'ha installata).Ciò potrebbe significare ad esempio che l'utente non può più segnalare arresti anomali o ANR all'utente attraverso il Play Store o altre conseguenze negative. Non sono sicuro di quali siano i problemi realmente accaduti qui, ma non credo che questo sarà tutto a posto.

In definitiva, non vorrei assolutamente suggerire di farlo. Di quale permesso hai bisogno che ti costringa a farlo? Per molte ragioni, non consiglierei che le applicazioni di terzi dichiarino le proprie autorizzazioni nella maggior parte dei casi, perché ci sono molte cattive esperienze utente in merito a permessi che sono noti solo dopo che potrebbero essere stati necessari.

+0

Grazie per la risposta. Un buon esempio di questo problema è l'applicazione Tasker, che richiede net.dinglisch.android.tasker.PERMISSION_RUN_TASKS. Come saprai, Tasker può apportare alcune importanti modifiche al dispositivo, quindi è comprensibile il motivo per cui lo sviluppatore vorrebbe portarlo all'attenzione dell'utente che installa la mia app. Se suggerisco ai miei utenti di installare Tasker per le sue funzionalità compatibili, mi viene presentata questa situazione, in cui le autorizzazioni nel mio manifest non vengono rilevate. Non sono sicuro di poter contrassegnare la risposta come "corretta" in quanto non sembra essere una soluzione? – brandall

Problemi correlati