我使用Android NDK工具链编译了二进制文件,并尝试将其部署到设备上。使用JNI使用NDK构建的应用程序将通过本机代码执行此二进制文件。我希望避免生根设备。
二进制文件将由多个应用程序使用,因此我希望将其存储在共享位置,而不是每个应用程序存储一次。
我找不到合适的位置来部署这个二进制文件 - 这些是我尝试过的地方:
/ mnt / sdcard - 使用SDK中的 getExternalStoragePublicDirectory(),但是SD卡安装为noexec,这意味着我无法运行它。
/ system / bin - 只读文件系统,因此无法复制。如果我使用以下方法在模拟器上重新安装/系统,我可以使用adb push推送文件:
mount -o rw,remount -t yaffs2 /dev/block/mtd3 /system
但是我想避免这种情况,因为设备需要扎根。
/ data / local - 使用adb push,我可以将二进制文件推送到此位置。但是,我似乎无法在代码中找到一种方法(使用Android SDK)。内部存储机制指向 / data / data / package 。
我使用NDK工具链附带的 arm-linux-androideabi-g ++ 编译了调用此可执行文件的本机代码。这适用于 / system / bin 和 / data / local 中的二进制文件。
总之,我正在寻找Android文件系统中的一个位置,我可以从project / assets文件夹中复制文件,可以使用世界上可执行的权限。
答案 0 :(得分:7)
/data/local/tmp/
和"/data/data/" + packageName + "/files"
直接测试你的目标二进制文件,首先建议。
答案 1 :(得分:5)
如果您可以使用adb,则可以使用777权限准备目录/ data / local / bin。
或者,您可以在私有应用程序目录(/data/data/your.package.unique.name/files)中创建文件,并将文件权限设置为 777 755。
答案 2 :(得分:0)
如果你想避免使设备生根,那么基本上SD卡是唯一可以假设世界可写的地方
编辑:注意截至2014/2015年Android框架的最新变化!。
最好让你的二进制部分安装APK,然后将这个二进制文件从APK中提取到私有存储中,使其成为世界可执行文件等,并以某种方式宣布二进制位置,但一般期望一些问题取决于操作系统版本和供应商