2012-04-12 1 views
9

Voglio eseguire hello world scritto su C++ e compilato con Android toolchain 9, ma ho dovuto affrontare un problema: per impostazione predefinita non ho le autorizzazioni per avviarlo e non posso cambiare i permessi usando chmod`.Come eseguire l'applicazione C++ su Android SHELL

ho usato Android 2.3.3 - Api Level 10

applicazione è stata compilata da Cross compilatore per API level 9

Procedura:

Compile applicazione:

~/toolchain_andr9/bin/arm-linux-androideabi- g ++ helloworld.cpp

quindi inviare domanda di SDCARD sull'emulatore:

>adb push a.out /mnt/sdcard 

poi andare a SHELL e tenta di eseguire a.out:

>adb shell 
> 
>/mnt/sdcard/a.out 

e il risultato è:

>`/mnt/sdcard/a.out: permission denied` 

comando ls -l spettacoli diritti per a.out:

>`----rwxr-x system sdcard_rw 863656 2012-04-12 22:42 a.out` 

Ho provato a cambiare i permessi:

>chmod 777 /mnt/sdcard/a.out 

Ma i diritti non cambiano:

>`----rwxr-x system sdcard_rw 863656 2012-04-12 22:42 a.out` 

Credo di aver lasciato qualcosa di importante con Android.

Qualcuno potrebbe aiutarmi e darmi un modo come eseguire l'applicazione in `Android SHELL?

Grazie mille.

P.S. scusa per il mio inglese =

+0

Hai una radice? Без рута может не выйти фокус: http://gimite.net/en/index.php?Run%20native%20executable%20in%20Android%20App –

+1

prova a mettere il tuo file sotto/data/local lì dovresti essere in grado di chmod tuo file – mgiza

risposta

13

Per impostazione predefinita, la scheda SD è montata con l'opzione noexec, che non consente l'esecuzione di alcun file sulla scheda, indipendentemente dalle autorizzazioni (anche -rwxrwxrwx), quindi è necessario spostare il file in un'altra posizione e quindi eseguirlo.

Il modo più semplice è spostare il file su /data/local/tmp/ ed eseguirlo utilizzando il percorso completo (normale semantica POSIX PATH).

> adb push a.out /data/local/tmp/a.out 
> adb shell 
> chmod 755 /data/local/tmp/a.out 
> /data/local/tmp/a.out 

Questo non lo fa richiedono accesso root e sopravviveriavvio.

4

Se il telefono è stato rootato, è possibile eseguire uno mount -o remount,rw /mnt/sdcard e dovrebbe essere eseguito.

L'ho provato sul mio Android.

+0

Funziona? Qualcun altro ha provato questo? Il problema rimuove il flag noexec? La scheda SD viene rimontata al riavvio? Ho incasinato il formato (vfat> ext2) e ha reso molto pazzo Android. Ho dovuto usare 'newfs_msdos' per risolverlo, quindi sono riluttante a fare casino con la sdcard. –

+0

@MarkMikofski Questo non sopravvive al riavvio e la 'sdcard' monta normalmente al riavvio. –

+0

fantastico, che funziona perfettamente, rimuove solo le bandiere "nosuid, nodev, noexec'! –