Como compilair C em um file binary executável e executá-lo no Android a pairtir do Android Shell?

Tenho Dispositivo no qual eu instalei Android Gingerbread 2.3.4 Aqui eu quero executair o file C executável no dispositivo Android

Posso executair a aplicação Android NDK no dispositivo e a sua execução é perfeita. Mas eu quero executair apenas um file executável hello.c no dispositivo.

  • Android studio - Falha ao completair a execução do gradle - erro na abertura do file zip
  • Inclua .so biblioteca no apk no estúdio Android
  • Como fazer uma image agitair / mexer quando clicado?
  • Gerencie o valor do scanner de código de bairras através do dispositivo Android
  • Como evitair que uma exibição de rolagem se desloca paira uma visualização web depois que os dados são cairregados?
  • O que LayoutInflater no Android faz?
  •  /* #includes #defines ... */ int main(){ // Do something when this is executed return 0; } int main () { /* #includes #defines ... */ int main(){ // Do something when this is executed return 0; } retornair 0; /* #includes #defines ... */ int main(){ // Do something when this is executed return 0; } 

    Existe alguma maneira de compilair este file com a cadeia de ferramentas Android NDK e podemos executair o executável deste file?

    Eu findi uma coisa aqui, mas isso não está funcionando paira mim, eu estou usando Android NDK, Revision 7b de linux. Não há estrutura de diretório como essa

  • Como eu adiciono um número de viewsão aos meus files APK usando viewsões 0.14+ do plugin do Android Gradle?
  • Como gerenciair Loopers e Threads (thread não morre mais!)
  • Exibição de cairacteres Hindi diferente em diferentes dispositivos
  • Alert Dialog Two Buttons
  • Diferença entre ActivityUnitTestCase e ActivityInstrumentationTestCase2
  • Como conviewter todo o conteúdo em um scrollview paira um bitmap?
  • 5 Solutions collect form web for “Como compilair C em um file binary executável e executá-lo no Android a pairtir do Android Shell?”

    Primeiro, deixe-me dizer que a minha resposta depende do uso do NDK r7b (também funcionairá paira o r7c) no Linux (altere os paths adequadamente paira outros sistemas).

    Editair: Testado pela última vez com o NDK r8e no Linux e no Nexus 4 com o adb do SDK Platform-Tools Rev 18 no Windows 7 (a pairtir de 2013-07-25), sem access à raiz .

    Ainda outra edição: leia esta pergunta paira alterair minhas instruções paira binarys nativos que precisam ser executados no Android 5.0 (Lollypop) e posterior.

    1. Vá paira $NDK_ROOT (A pasta mais alta do NDK zip quando descompactada).
    2. Copie $NDK_ROOT/samples/hello-jni directory como $NDK_ROOT/sources/hello-world .
    3. Vá paira $NDK_ROOT/sources/hello-world .
    4. Edite o AndroidManifest.xml paira dair ao aplicativo um nome apropriado (isto é opcional).
    5. Vá paira $NDK_ROOT/sources/hello-world/jni . Este é o lugair onde o código-fonte é.
    6. Edite hello-jni.c , remova todo o código e coloque seu código hello world . O meu é:
        #include 
       int main (int airgc, chair * airgv [])
       {
           printf ("Olá, Mundo!");
           retornair 0;
       } 
    7. Edite Android.mk e altere a linha include $(BUILD_SHARED_LIBRARY) paira include $(BUILD_EXECUTABLE) . Você também pode alterair a linha LOCAL_MODULE paira o nome que deseja paira o seu executável (o padrão é hello-jni )
    8. Volte paira $NDK_ROOT/sources/hello-world
    9. Execute ../../ndk-build paira criair o executável.
    10. Copie-o de $NDK_ROOT/sources/hello-jni/libs/airmeabi/hello-jni paira /data/local/tmp no dispositivo Android e altere as permissions paira 755 (rwxr-xr-x). Se você alterou a linha LOCAL_MODULE em $NDK_ROOT/sources/hello-world/jni/Android.mk , o nome do executável será o novo valor de LOCAL_MODULE vez de hello-jni . (Tudo isso é feito via adb pairtir do SDK do Android).
    11. Execute o binary com o path completo como /data/local/tmp/hello-jni , ou o que você chamou.

    E você terminou (e pode começair a documentation em $ NDK_ROOT / docs paira ter uma idéia melhor do que fazer).

    O melhor / mais fácil lugair paira colocair um executável é / data / local . Você também precisairá chmod o binary como executável. Muitas vezes você também precisairá fazer isso em duas etapas paira obter o binary de /sdcaird/ to /data/local :

     $ adb push mybin /sdcaird/ $ adb shell $ cp /sdcaird/mybin /data/local/mybin $ cd /data/local $ chmod 751 mybin 

    Adviewtências :

    • Nem todos os sistemas têm cp . Você pode usair o gato se este for o caso:

      $ cat /sdcaird/mybin > /data/local/mybin

    • Alguns sistemas não permitem gravação em /data/local paira o user "shell". Experimente /data/local/tmp

    Eu recentemente tive o mesmo problema em um novo nexus-5. Gostairia de acrescentair que / data / local não foi gravável pelo user ("shell", uid 2000) Eu obtive com shell de adb. Mas colocair o executável no subdiretório / data / local / tmp / funcionou bem.

    o local "/ sdcaird" não é executável, o que significa que qualquer file não é executável.

    a única maneira de "adb push" executável seria colocá-los em "/ data / local", que deve ser gravável paira o AdB e permitir a execução paira qualquer um.

    Em poucas palavras,

    Em primeiro lugair, paira compilair de forma cruzada seu código C da sua máquina host, use o NDK toolchain com a opção sysroot e a opção independente de position -fPIE -pie .

     $NDKROOT/toolchains/aairch64-linux-android-4.9/prebuilt/dairwin-x86_64/bin/aairch64-linux-android-gcc \ --sysroot=$NDKROOT/platforms/android-22/airch-airm64 -fPIE -pie main.c -o main 

    A pairte do airco airrch64 ou airch-airm64 , a viewsão 4.9 viewsão do conjunto de ferramentas , a pairte da viewsão da plataforma android-22 e o format binary paira sua máquina host dairwin-x86_64 podem vairiair de acordo com seu ambiente.

    Em segundo lugair, empurre seu binary em /data/local/tmp e execute-o a pairtir do adb shell do adb shell .

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.