2013-06-29 11 views
8

Androidのネイティブコマンドラインアプリケーションをapkにパッケージしたいと思います。私は、jni/Android.mkを使用するndk-buildでアプリケーションをビルドしています。出力はlibs/armeabi/<MyApp>にあります。私もアリとAPKの建物があります。しかし、apkはコマンドラインアプリケーションを選択していないようです。私がapkを解凍すると、アプリはそこにはありません。apkでネイティブコマンドラインアプリケーションをパッケージ化するには?

あらかじめ作成されたコマンドラインアプリを組み込むには、どうすればいいですか?

また、antがndk-buildを実行するにはどうすればよいですか? (これはすでに答えた:Android NDK build with ANT script

答えて

10

Android NDK build with ANT scriptを参照してください。

libs/armeabiから自動的にコピーされない場合はaaptを使用してAPKにバイナリを追加できます。Documentation for aapt element in Ant scriptを参照してください。

ファイルが正しく実行可能なアクセス許可で/data/data/your.package.full.name/libに抽出されると思います。のみデバッグビルドの後者 -

Antビルドは、パターンのみ^.+\.so$またはgdbserverに一致するlibs/armeabiからファイルを追加し、「ApkBuilder」と呼ばれるステップを伴います。

しかし、「myexecutable.so」に実行ファイルの名前を変更するのに十分ではありません。このファイルは、デバイス上のAPKインストーラによって抽出されません。

に実行ファイルの名前を変更するのに十分である「 LIB myexecutable の.so」:このファイルは実行権限と、/data/data/your.package.full.name/libにデバイス上の APKインストーラパッケージマネージャによって抽出されます。

私は個人的に、実際にはこの図書館に特別な名前を付けたいと思います。 lib...ffmpeg...so

+0

私はこれを行いました。確かに、ndk-buildを実行するためのantタスクを追加することができます。 Antは自動的に実行可能ファイルをコピーしません。また、apt(コマンドラインまたはantのどちらか)でバイナリを追加することもできます。残念ながら、結果のAPKはインストールされませんか? (ある種のマニフェストエラー)unzipで確認できるように、実行可能ファイルはapkには間違いありません。これは役に立ちましたが、完全に仕事をしていない、あなたはより多くの提案がありますか? –

+0

@Alexどのマニフェストエラーですか?あなたはもっと具体的になりますか? –

+0

OK、ここに不正行為をする方法があります:実行可能ファイル "gdbserver"を呼び出すと、APKの 'lib/armeabi'ディレクトリに正しくパッケージされ、' /data/data/your.package.name/lib'ディレクトリに移動します。あなたが気づいたように、2つの障害があります。 1つは、APKにバイナリを追加することですが、カスタムANTステップとして実行できますが、APKに署名する前に注意してください。デバイス上の2番目のステップは、よりトリッキーです。 –

2

一般的に、あなたはあなたの資産を抽出するためにAssetManagerを使用し、その後、Assetsフォルダにあなたのコマンドラインアプリを出す必要があります(抽出後のchmodそれをすることを忘れないでください!)。しかし、Androidのすべてのディレクトリが実行可能なバイナリを格納するわけではないので、どこに解凍するかに問題があります。 Android 2.2では、私は/cacheを試してみました。新しいアンドロイドのために言わないでください。 申し訳ありませんが、アリに関するお勧めはありません。

+0

私はアンドロイド4.0/4.1/4.2のためにこれをしようとしています。/data/local作業の実行可能バイナリ。 –

+3

/data/localは、多くのアンドロイドリリースでは書き込みが禁止されており、読み込み制限があります。おそらくそれを置くのに最適な場所は、アプリケーションのプライベートストレージですが、他のアプリやadbシェルと共有しようとするならば、ファイルのアクセス権をグローバルに読み込み、実行可能に設定してください。 –

関連する問題