0

NDK で eclipse を使用して、C++ アプリケーションを Android に移植しています。Linux では、タスクを実行するためにシェルで引数を指定して呼び出すアプリケーションであり、GUI は提供されず、単なるコマンド ライン インターフェイスです。現在、NDK で移植された C++ コードに渡される引数仕様をカプセル化する非常に基本的な GUI ラッパーを Java に追加しましたが、Android フォンに ssh したときに呼び出すことができるアプリケーションも必要です。 .

Android では、一部のアプリケーションがシェルから起動できるようです。たとえばSSH Droid、Google Play ストアからインストールされた には、その GUI に加えて、シェル呼び出し可能なバージョンがあります。これはパス名の下に表示されます/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、ディレクトリcachefiles、およびのみに実行可能ファイルが見つかりませんlib

Eclipse を使用して、ネイティブに実行可能なバイナリをアプリケーションの APK アーカイブにパッケージ化するにはどうすればよいですか? APK に存在する場合、インストールで抽出を自動化し、実行可能アクセス許可を設定して、シェルから起動できるようにするにはどうすればよいですか? SSH Droid はこれらの両方を行っているように見えますが、私も同様に行いたいと考えています。これがどのように行われるかを示す簡単な例はありますか?

apk も必要ですか? どうにかして、既存の Linux ポート バージョンに合わせて、コマンド ライン インターフェイスの実行可能ファイルを作成できますか?

シェル CLI の引数はどのように指定されますか? C++ アプリケーションでargcand likeを使用しますか?argv

4

1 に答える 1

0

私にとっては、アプリケーションにEclipseもJavaコードも必要ありませんでした。Linux から移植された私のアプリケーションには、すでに一連の makefile が用意されていました。NDK のスタンドアロン ツール チェーン部分を介して、既存のメイクファイル システムを使用することができました。

この回答により、スタンドアロン ツール チェーンを使用できるようになりました。私の場合、NDK を に既にインストールしており、Macintosh からクロス コンパイルしている場合に呼び出した方法を次に示し/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

これで、通常のコマンド ライン インターフェイスの Linux アプリケーションのように、電話のシェルから myapp を呼び出すことができます。私の元の Linux コードのargcargvは、このプロセスによって Android ビルドで記述されたとおりに機能します。

于 2015-04-24T22:24:02.667 に答える