Android上的可写和可执行文件的位置(Writeable and Executable loca

2019-08-03 11:49发布

我编译使用Android NDK工具链二元,并在尝试将它部署到一个设备。 然后已建成的NDK使用JNI的应用程序将通过本地代码执行这个二进制文件。 我希望能避免生根设备。

二进制文件将被多个应用程序使用,所以我想将它存储在共享位置,而不是每一次应用程序。

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

  1. 的/ mnt / SD卡 -使用getExternalStoragePublicDirectory()从SDK,但是SD卡被安装为NOEXEC,这意味着我不能运行它。

  2. /系统/ bin中 -只读文件系统,因此无法复制。 我可以用ADB推推的文件,如果我重新安装/系统上使用模拟器:

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

    不过,我想避免这种情况,因为该设备将需要扎根。

  3. /数据/本地 -使用ADB推,我可以把二进制到这个位置。 不过,我似乎无法找到一种方法,在代码中做到这一点(使用Android SDK)。 内部存储机制指向/数据/数据/包

我编译调用该可执行文件,使用附带的工具链NDK ARM-Linux的androideabi-G ++本地代码。 这适用于在/系统/ bin/数据/本地二进制文件。

总之,我在寻找中,我可以从项目/资产文件夹,这世界上可执行的权限是可以复制一个文件Android的文件系统中的位置。

Answer 1:

如果你想避免生根设备,然后基本上SD卡,你可以假设的唯一的地方是世界上可写


编辑 :介意Android框架为2014/2015最近的变化!

这是更好地使安装APK的二进制文件的一部分,然后提取该二进制APK出到专用存储,使世界可执行文件等,并以某种方式宣布二进制位置,但一般预期这取决于操作系统版本和供应商的一些问题



Answer 2:

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

为你的目标二进制直接测试,首先是建议。



Answer 3:

如果你可以使用adb,你可以用777个权限准备目录/数据/ local / bin目录。

或者,你可以创建在私有应用程序目录(/data/data/your.package.unique.name/files)的文件,并设置文件权限为777 755。



文章来源: Writeable and Executable location on Android