2015-06-25 22 views
18

Sono in grado di rendere la mia app, l'app del dispositivo proprietario tramite NFC come indicato here. Ora voglio aggiornare la mia app via etere, ma non sono riuscito a trovare un metodo senza il rooting.Aggiornamenti OTA per applicazione Android proprietario dispositivo (modalità Kiosk)

Google offre molte opzioni per le aziende nello sviluppo di app come menzionato here, ma da nessuna parte fornisce un modo per aggiornare l'applicazione tramite OTA.

Alla ricerca di una soluzione.

+0

Evolve (https://github.com/VivekPanyam/Evolve) potrebbe essere utile –

+0

L'ho già visto ma non riesco a utilizzarlo, è anche in fase alpha, che potrebbe causare l'arresto anomalo della nostra app. Sembra che cambi il codice in fase di esecuzione, quindi sembra un po 'complicato. – Shubham

+0

@Shubham hai ottenuto questo lavoro? – Maragues

risposta

1

Creare un servizio per il controllo in background per l'aggiornamento. se l'aggiornamento è disponibile, scaricare il file apk e scriverlo in alcuni punti come la sdcard. aspetta qualche secondo per scrivere completamente a filo. quindi chiama il codice seguente per installare il tuo nuovo apk.

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

fileName è percorso del nuovo file apk su scheda SD.

+0

Voglio farlo in silenzio. Il tuo metodo non installerà l'apk in silenzio. Questo aprirà l'interfaccia utente di installazione e dovrà anche controllare l'impostazione "consenti installazioni da fonti sconosciute " – Shubham

1

Si potrebbe utilizzare Play Store per fornire gli aggiornamenti per la vostra applicazione:

  1. Fornitura proprietario del dispositivo applicazione tramite NFC, proprio come hai già fatto.

  2. Fornire una versione aggiornata (stesso nome del pacchetto, stessa firma, numero di versione più alto) dell'app del proprietario del dispositivo su Play Store.

  3. Nell'app Play Store sul dispositivo, cercare la versione dell'app Play Store dell'app e installare l'aggiornamento.

  4. Attivare gli aggiornamenti automatici per il dispositivo proprietario dell'app in Play Store (sulla pagina Play Store della vostra applicazione, fare clic sul menu (tre punti) e attivare la casella di controllo di aggiornamento automatico.

Ecco un po 'di sforzo per la fase di provisioning, ma il dispositivo dovrebbe ricevere automaticamente gli aggiornamenti futuri

+1

Grazie per questa risposta, ho pensato alla stessa cosa ma sarebbe stato necessario impostare un account Gmail sul dispositivo che stavo evitando in quanto l'applicazione è destinata alla modalità KIOSK. – Shubham

4

Questo è solo pura speculazione come non ho mai provato a utilizzare l'API di installazione del pacchetto stesso:.

si potrebbe provare a impostare un pacchetto di installazione ge per l'app del proprietario del dispositivo (utilizzando PackageManager.setInstallerPackageName()). Questo pacchetto di installazione dovrebbe essere un APK separato firmato con lo stesso certificato dell'APK del proprietario del dispositivo.

getPackageManager().setInstallerPackage("<device.owner.package.name>", "<installer.package.name>"); 

Dal tuo APK installatore, si potrebbe quindi utilizzare PackageInstaller per preparare un aggiornamento:

PackageInstaller pi = getPackageManager().getPackageInstaller(); 
int sessId = pi.createSession(new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)); 
PackageInstaller.Session session = pi.openSession(sessId); 
OutputStream out = session.openWrite("app"); 
// .. write updated APK file to out 
session.fsync(out); 
session.commit(...); 
session.close(); 

Non sono sicuro se questo viene installato silenziosamente l'aggiornamento anche se (o se funziona affatto nel modo che mi sarei aspettato).

+0

@Shubham Nel caso in cui provi questo approccio, Sarei davvero felice per il feedback se funzionasse come mi aspettavo (o se non avessi avuto problemi). –

+0

Non ho potuto provare la tua risposta, ma ho fatto qualche altra ricerca su Package Installer e ho scoperto che per l'invio di una sessione lo faremo avrò bisogno dei permessi di root. Ci riproverò presto e ti darò un feedback. http://stackoverflow.com/questions/26884956/how-to-install-update-remove-apk-using-packageinstaller-class-in-and roid-l – Shubham

0

Immagino che potresti voler diventare un'app partner EMM/MDM: è simile all'app del proprietario del dispositivo ma con privilegi e API avanzati. Normalmente OEM come Samsung/HTC forniscono API nascoste alle app dei partner MDM per l'aggiornamento delle app. Non sono sicuro che Android for Work fornisca questa API.

Per esempio: OEM fornisce un'API chiamata PacchettoAggiornamento (String packageName) che può essere utilizzato dal cliente MDM sul dispositivo per aggiornare il package.You può utilizzare questa API per aggiornare il proprietario del dispositivo App troppo.

Problemi correlati