【问题标题】:How to create an Android executable for launch from the shell?如何创建一个 Android 可执行文件以从 shell 启动?
【发布时间】:2015-04-23 15:17:46
【问题描述】:

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

在 Android 上,我看到某些应用程序可以从 shell 启动。例如,从 Google Play 商店安装的SSH Droid,除了它的 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++ 应用程序中一样使用 argcargv

【问题讨论】:

标签: c++ shell android-ndk apk-expansion-files dropbear


【解决方案1】:

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

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

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 应用程序一样。我的原始 Linux 代码中的 argcargv 按照此过程在 Android 构建中编写的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2014-07-03
    • 1970-01-01
    相关资源
    最近更新 更多