Ci sono un paio di modi per gestire questo. Se il tuo bisogno principale è quello di essere in grado di avviare rapidamente la tua applicazione ogni volta che esegui una nuova modifica, allora una soluzione adb shell am intent -n com.example.app/.App
è la soluzione più semplice.
Se si desidera semplicemente creare una scorciatoia (e non ti interessa dove) usa com.android.launcher.action.INSTALL_SHORTCUT
come dicono tutti. Avrai bisogno di un'app o di un cestino per farlo, poiché la trasmissione am non prenderà intenti annidati.
Se si sta lavorando con uno specifico launcher (come ADW Launcher) è possibile modificare il database delle scorciatoie. Questo vi permetterà di specificare le coordinate del collegamento ([2, 3], in questo caso)
adb shell sqlite3 /data/data/org.adw.launcher/databases/launcher.db "DELETE FROM favorites WHERE _id=1; INSERT INTO favorites VALUES(1,'MyApp','#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.example.app/.App;end',-100,0,2,3,1,1,0,-1,NULL,0,NULL,NULL,NULL,NULL,NULL);"
avrete bisogno di dire al programma di avvio per aggiornare dal database. Solitamente l'unico modo è quello di uccidere il launcher. Le versioni successive di am (il comando shell ActivityManager) hanno opzioni per riavviare un pacchetto, le versioni precedenti no. In tal caso si avrebbe bisogno di scrivere una piccola applicazione:
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
am.restartPackage("org.adw.launcher");
C'è relativamente ben documentato 'com.android.launcher.action.INSTALL_SHORTCUT', che si potrebbe chiamare attraverso' adb shell broadcast', ma uno degli extra è l'intento di lancio. Se non è possibile posizionarlo sulla riga di comando, è possibile scrivere un'app stub che non fa altro che trasmettere quell'intenzione, quindi installarla, richiamarla e disinstallarla dalla riga di comando. – 323go