Android上的可写和可执行位置

Tom*_*ith 15 filesystems android android-ndk

我使用Android NDK工具链编译了二进制文件,并尝试将其部署到设备上.使用JNI使用NDK构建的应用程序将通过本机代码执行此二进制文件.我希望避免生根设备.

二进制文件将由多个应用程序使用,因此我希望将其存储在共享位置,而不是每个应用程序存储一次.

我找不到合适的位置来部署这个二进制文件 - 这些是我尝试过的地方:

  1. / mnt/sdcard - 使用SDK中的getExternalStoragePublicDirectory(),但SD卡安装为noexec,这意味着我无法运行它.

  2. / system/bin - 只读文件系统,因此无法复制.如果我使用以下方法在模拟器上重新安装/系统,我可以使用adb push推送文件:

    mount -o rw,remount -t yaffs2 /dev/block/mtd3 /system
    
    Run Code Online (Sandbox Code Playgroud)

    但是我想避免这种情况,因为设备需要植根.

  3. / data/local - 使用adb push,我可以将二进制文件推送到此位置.但是,我似乎无法在代码中找到一种方法(使用Android SDK).内部存储机制指向/ data/data/package.

我使用NDK工具链附带的arm-linux-androideabi-g ++编译了调用此可执行文件的本机代码.这适用于/ system/bin/ data/local中的二进制文件.

总之,我正在寻找Android文件系统中的一个位置,我可以从project/assets文件夹中复制文件,这可以使用世界上可执行的权限.

小智 7

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

对于直接测试你的目标二进制,首先是推荐.


Ale*_*ohn 5

如果您可以使用adb,则可以使用777权限准备目录/ data/local/bin.

或者,您可以在专用应用程序目录(/data/data/your.package.unique.name/files)中创建文件,并将文件权限设置为777 755.

  • 777表示其他应用程序可以用恶意软件替换可执行文件; 这是不必要的,也是一个非常糟糕的主意.其他人需要能够阅读和执行,但不能写. (2认同)

Mar*_*ski 1

如果你想避免对设备进行 root,那么基本上 SD 卡是你可以假设是世界上可写的唯一地方


编辑:请注意 Android 框架截至 2014/2015 年的最新变化!

最好使您的二进制文件成为可安装 APK 的一部分,然后将该二进制文件从 APK 中提取到私有存储中,使其成为全局可执行文件等,并以某种方式宣布二进制位置,但通常会出现一些问题,具体取决于操作系统版本和供应商