0

我正在使用 Eclipse 和 NDK 将我的 C++ 应用程序移植到 Android。在 Linux 上,它是您在 shell 中使用参数调用以执行任务的应用程序,不提供 GUI,它只是一个命令行界面。目前,我在 java 中添加了一个非常基本的 GUI 包装器,它封装了传递给 NDK 中移植的 C++ 代码的参数规范,但是,我还希望有一个可以在我 ssh 进入我的 android 手机时调用的应用程序.

在 Android 上,我看到一些应用程序能够从 shell 启动。例如,SSH Droid从 Google Play 商店安装的除了 GUI 之外,还有一个 shell 可调用版本。我在路径名下看到了这个,/data/data/berserker.android.apps.sshdroid/dropbear/ssh而它的 APK 位于/data/app/berserker.android.apps.sshdroid-1.apk. 对于我的 APK,我在 中找不到可执行文件/data/data/com.mydomain.myapp-37.apk,只有目录cachefileslib.

使用 Eclipse,我如何在我的应用程序的 APK 存档中打包本机可执行的二进制文件?一旦出现在我的 APK 中,我如何在安装中自动提取和设置可执行权限,以便我可以通过 shell 启动它?看来 SSH Droid 已经完成了这两件事,我也想这样做。有没有一个简单的例子说明这是如何完成的?

我什至需要一个 apk,我可以以某种方式创建一个更符合我现有 Linux 端口版本的命令行界面可执行文件吗?

如何为 shell CLI 指定参数?你在 C++ 应用程序中使用argc和喜欢吗?argv

4

1 回答 1

0

对我来说,我的应用程序中不需要 eclipse 或任何 java 代码。我从 Linux 移植的应用程序已经有一组生成文件。通过 NDK 的独立工具链部分,我能够使用我现有的 makefile 系统。

这个答案让我开始使用独立的工具链。就我而言,这是我在 Macintosh 交叉编译时调用它的方式,已经在以下位置安装了 NDK /Users/me/Development/android-ndk-r10d

ANDROID_NDK=/Users/me/Development/android-ndk-r10d
SYSROOT=$(ANDROID_NDK)/platforms/android-19/arch-arm
${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh --platform=android-19 --install-dir=${ANDROID_NDK}/myapp-android-toolchain --ndk-dir=/Users/me/Development/android-ndk-r10d --toolchain=arm-linux-androideabi-4.8 --system=darwin-x86_64

有了这个设置,我像这样启动了我的构建:

cd ~/base/of/myapp/src/
ANDROID_NDK=/Users/me/Development/android-ndk-r10d PATH=${ANDROID_NDK}/myapp-android-toolchain/bin:$PATH make

在我为我正在使用的一些第三方库中的交叉编译修复了一些配置问题之后,我有了一个工作构建。接下来,我想将它安装在我的手机上:

# Push to a location with write permission (sdcard):
cd ~/base/of/myapp/bin/ # My build puts the executable here.
adb push myapp /sdcard/
# Go into phone and complete the install manually:
adb shell
su
mount -oremount,rw rootfs /system  # /vendor/bin is in /system mount.
# One time creation of /vendor/bin (that is in the PATH by default):
mkdir /vendor/bin
# Copy the myapp executable over
cp /sdcard/myapp /vendor/bin/myapp

现在,我可以从手机上的 shell 调用 myapp,就像普通的命令行界面 Linux 应用程序一样。argc和来自我的argv原始 Linux 代码的工作与此过程在 Android 构建中编写的一样。

于 2015-04-24T22:24:02.667 回答