Run native executable in Android App

Demo†

Here's demo application called "Run Native Exe" to:

  • run local UNIX commands
  • run native executable downloaded from the Web

Package:NativeExe-0.2.apk
Source code:on Github(ADT project)

To install the package,

  • Go to Settings→Application and check "Unknown sources"
  • Open the package link above using Android Browser

or type "adb install NativeExe-*.apk" in your PC if you have Android SDK.

How can I run UNIX commands in Android App?†

You can use Runtime.exec() in standard Java. Here's sample code to run /system/bin/ls /sdcard in Android App:

try {    // Executes the command.    Process process = Runtime.getRuntime().exec("/system/bin/ls /sdcard");        // Reads stdout.    // NOTE: You can write to stdin of the command using    //       process.getOutputStream().    BufferedReader reader = new BufferedReader(            new InputStreamReader(process.getInputStream()));    int read;    char[] buffer = new char[4096];    StringBuffer output = new StringBuffer();    while ((read = reader.read(buffer)) > 0) {        output.append(buffer, 0, read);    }    reader.close();        // Waits for the command to finish.    process.waitFor();        return output.toString();} catch (IOException e) {    throw new RuntimeException(e);} catch (InterruptedException e) {    throw new RuntimeException(e);}

This code is based onthis article. Thanks yussi to let me know this by comment.

OK, but how can I put my own native executable in Android App?†

First, you need to cross-compile your native executable for ARM.

Here'sa way (dynamic link version). Oryou can use Scratchbox(Japanese).

If you get a file with a format like this, it's probably OK:

% file yourappyourapp: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.6.14, statically linked, not stripped

You have three ways to put the binary to the phone:

  • From Android Java app, using assets folder (by fnerg in comment below)
    • Include the binary in the assets folder.
    • Use getAssets().open("YourBinaryHere") to get an InputStream.
    • Write it to /data/data/app-package-name(e.g. /data/data/net.gimite.nativeexe), where your application has access to write files and make it executable.
    • Run "/system/bin/chmod 744 /data/data/app-package-name/yourapp" using the code above.
    • Run your executable using the code above.
  • From Android Java app, downloading via HTTP (which I use in my demo application above)
    • Dowload the executable using HTTP and put it to /data/data/app-package-name(e.g. /data/data/net.gimite.nativeexe), where your application has access to write files and make it executable. You can use standard Java FileOutputStream to write files there.
    • Run "/system/bin/chmod 744 /data/data/app-package-name/yourapp" using the code above.
    • Run your executable using the code above.
  • By adb (needs SDK and root)
    • If you want to put the executable to YOUR phone connected with adb command in Android SDK and you have root, you can put the executable by:
% adb shell$ su# mkdir /data/tmp# chmod 777 /data/tmp# exit$ exit% adb push yourapp /data/tmp% adb shell$ chmod 744 /data/tmp/yourapp$ /data/tmp/yourapp

Note that you cannot make files executable in /sdcard.

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. PHP扩展之XML操作(一)——SimpleXML
  2. js字符串转换成xml并使用
  3. XML数据读取方式性能比较(二)
  4. 让Asp与XML交互
  5. XML 实体引用、注释、命名规则
  6. XML数据读取方式性能比较(一)
  7. 给XML文档添加新 ”records”
  8. XML 增、删、改
  9. vbs类天生xml文件
  10. XML指南——XML 确认