2013-06-29 49 views
8

我想将Android本地命令行应用程序打包到apk中。我有使用jni/Android.mk的ndk-build应用程序构建。输出在libs/armeabi/<MyApp>。我也有安装了apk的建筑物。但是,apk似乎没有拿起命令行应用程序。如果我解压apk,那么应用程序不在那里。如何在apk中打包本机命令行应用程序?

什么我需要做的就是蚂蚁包括预建的命令行应用程序?

另外,我需要做些什么以使蚂蚁运行ndk-build? (这已经回答了:Android NDK build with ANT script

回答

10

请参阅Android NDK build with ANT script

如果Ant没有自动从libs/armeabi复制它,请参阅Documentation for aapt element in Ant script,您可以使用aapt将二进制文件添加到APK中。

我认为,该文件将被正确提取到/data/data/your.package.full.name/lib,具有可执行权限。

Ant生成涉及被称为“ApkBuilder”步骤,其中只有从libs/armeabi该匹配图案^.+\.so$gdbserver将文件添加 - 后者只调试版本。

但它是不够的可执行文件重命名为“myexecutable.so”:这个文件将不会通过设备上的APK安装器进行提取。

这足以可执行文件重命名为LIB myexecutable 。那么:这个文件将通过设备上的 APK安装包管理器可以提取到/data/data/your.package.full.name/lib,具有可执行权限。

我个人喜欢给这个非实际的图书馆一些特殊的名字,例如lib...ffmpeg...so

+0

我这样做了,当然我可以添加一个ant任务来运行ndk-build,它可以工作。 Ant不会自动复制可执行文件。我也可以用aapt(无论是从命令行还是蚂蚁)添加二进制文件。不幸的是,由此产生的apk不会安装? (某种类型的明显错误)可执行文件肯定是在apk中,可以使用unzip进行检查。这很有帮助,但没有完全做好这项工作,你有更多的建议吗? –

+0

@Alex什么明显错误?你可以说得更详细点吗? –

+0

OK,这里是欺骗的方式:打电话给你的可执行文件“gdbserver的”,它会正确地都打包'的lib/armeabi'目录中的APK,并安装到'/data/data/your.package.name设备上的/ lib'目录。正如你注意到的那样,有两个障碍。一,将二进制文件添加到APK中,可以作为自定义ANT步骤执行,但在APK签名之前您应该注意在那里进行。第二步,在设备上,可能会更棘手。 –

2

一般情况下,你应该把你的命令行应用到Assets文件夹,然后才能提取您的资产使用AssetManager(不要忘记chmod它提取后!)。但是将其提取到的位置会出现问题,因为不是Android中的每个目录都可以存储可执行的二进制文件。在Android 2.2上,我试过/cache,它工作。不能说较新的Android。 对不起,不能提供有关蚂蚁的建议。

+0

我想为android 4.0/4.1/4.2做到这一点。 /数据/本地工作中的可执行二进制文件。 –

+3

/data/local是许多android发行版上写入(并且很可能还读取)的限制。可能最好的地方是放在应用程序的私人存储空间中,但如果要将文件的权限与其他应用程序或adb外壳程序共享,则可以将该文件的权限设置为全局可读和可执行文件。 –

相关问题