Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Writeable and Executable location on Android

I've compiled a binary using the Android NDK toolchain, and am attempting to deploy it to a device. An application which has been built with the NDK using JNI will then execute this binary via native code. I'm hoping to avoid rooting the device.

The binary will be used by multiple applications, so I'd like to store it in a shared location, rather than once per application.

I can't find an appropriate location to deploy this binary to - these are the places I've tried:

  1. /mnt/sdcard - using getExternalStoragePublicDirectory() from the SDK, however the SD card is mounted as noexec, meaning I can't run it.

  2. /system/bin - read-only file system, so can't copy. I can push the file using adb push if I remount /system on the emulator using:

    mount -o rw,remount -t yaffs2 /dev/block/mtd3 /system
    

    However I'd like to avoid this, as the device would need to be rooted.

  3. /data/local - using adb push, I can push the binary to this location. However, I can't seem to find a way to do this in code (using the Android SDK). The internal storage mechanism points to /data/data/package.

I've compiled native code which calls this executable, using arm-linux-androideabi-g++ shipped with the NDK toolchain. This works with the binary in /system/bin and /data/local.

In summary, I'm looking for a location in the Android file system to which I can copy a file from the project /assets folder, which world-executable permissions are possible.

like image 880
Tom Smith Avatar asked Dec 03 '12 19:12

Tom Smith


People also ask

Where is data stored on an Android phone?

Android provides two types of physical storage locations: internal storage and external storage. On most devices, internal storage is smaller than external storage. However, internal storage is always available on all devices, making it a more reliable place to put data on which your app depends.

How to store data in Android app?

Storage on the InsideTo save a file to the internal storage, you must first obtain it from the internal directory. You can do this by calling the getFilesDir() or getCacheDir() methods. The getFilesDir() method returns the absolute path to the directory where files are created on the filesystem.

How do I access app data on Android?

Open your devices' App drawer – Depending on the version of Android software you're running you can click on the home screen icon that has several dots or you can swipe up on the screen. Use the search bar to quickly locate the 'File Manager' app. Or, locate it among your other apps and tap on it.


1 Answers

/data/local/tmp/ and "/data/data/" + packageName + "/files"

for direct testing you target binary , first is recommend.

like image 199
ifree Avatar answered Nov 08 '22 00:11

ifree