2010-10-26 2 views

risposta

28

È necessario impostare la voce android:installLocation nel file AndroidManifest.xml (i valori preferExternal o auto funzioneranno).

NB! Per questo obiettivo di build dovrebbe essere API Livello 8 (Android 2.2).

+0

grazie, per quanto riguarda il livello di API . dovrebbe essere o deve essere? Ad esempio, posso targetizzare 1.6 e avere ancora questa funzione? – clamp

+1

Deve essere. Questa è la funzione Froyo e la build fallirà con 1.6 (non riuscirà a trovare questo attributo). Puoi controllare questo articolo per maggiori dettagli: http://android-developers.blogspot.com/2010/07/apps-on-sd-card-details.html. – Ralkie

+1

Non deve. Beh, come nella mia risposta qui sotto, devi scegliere il target 2.2, ma puoi ancora mantenere la compatibilità 1.6 se non usi nessuna funzionalità non disponibile in 1.6 – Tseng

14

È anche possibile impostare android:installLocation e scegliere ancora su Android 1.6.

Nella tua AndroidManifest.xml è necessario inserire il min SDK versione del genere

<uses-sdk android:minSdkVersion="4" /> 

Questo farà in modo che l'applicazione funziona solo su Android 1.6 e superiori. Ciò ovviamente causerà un errore del compilatore nel tuo progetto Eccex. Questo perché l'1.6 SDK non è al corrente dello android:installLocation. Per risolvere questo problema, fai clic con il pulsante destro del mouse sul progetto nello spazio del progetto Eclipse (supponendo che tu stia utilizzando Eclipse, non so come funziona in altri IDE o con build Ant) quindi vai all'opzione "Android" e seleziona "Progetto Build Target "su Android 2.2.

Questo rimuoverà l'errore mostrato sopra ed è possibile compilare/esportare il file APK. In questo modo l'APK funzionerà su Android 1.6-2.1 come al solito e su Android 2.2 ti consentirà di utilizzare la scheda SD per installare/spostare l'app.

Tuttavia una parola di avvertenza: Questa può essere una fonte di incompatibilità, se non stai attento. È quindi necessaria una fase di test più intensa, poiché non si noterà direttamente se si utilizza una funzionalità 2.x, poiché Eclipse non lo mostrerà come errore, poiché utilizza l'SDK di Android 2.2 come riferimento.

in modo da avere in pratica 2 scelte: 1. fare solo i passi precedenti, quando si esporta/firmare la vostra applicazione (cioè poco prima si è in procinto di pubblicare questa nuova versione) e quindi impostare nuovamente o 2. Testare ampiamente le applicazioni su 1.6 Device o Emulator e verificare se si arresta in modo anomalo in qualsiasi momento, poiché l'app utilizza una funzionalità disponibile solo su SO più recente di 1.6.

A seconda della complicazione della domanda, la prima è di solito più sicura, tuttavia si rischia di aver dimenticato di farlo una volta. Ciò comporterebbe la conseguenza che per questo aggiornamento l'utente non avrà la possibilità di installarlo sulla scheda SD. La scelta 2 ha il problema, che se non testate tutto abbastanza bene, l'app potrebbe improvvisamente forzare la chiusura quando un dispositivo Android 1.6 tenta di chiamare funzioni/funzioni disponibili solo in 2.x.

+0

Ho usato questo metodo - Costruisco l'intera app con un obiettivo di build di 1.6, e quindi cambia le cose alla fine per avere minsdkversion = "4" e costruire target impostato su 2.2 prima della distribuzione. – AndrewPK

0

Si prega di seguire la procedura qui sotto per i telefoni Android.

  1. Copia l'SDK di Android sul tuo sistema.
  2. Connetti il ​​tuo cellulare al sistema e abilita l'opzione di debug USB sul tuo cellulare.
  3. linea cmd aperta e passare al percorso android sdk\platform-tools
  4. Eseguire il comando adb shell pm setInstallLocation 2
  5. Vai a impostazioni del cellulare e selezionare l'opzione "Sposta in scheda SD" è abilitato o meno.
+0

Grazie !! Questa risposta è molto buona. Ha funzionato per me su Gingerbread. – douggynix