2

この記事から

http://marakana.com/forums/android/examples/49.html

NDK の助けを借りてビルドされたアプリケーションが次のことを行うのを見てきました

1>すべてのcコード(jniフォルダー内)をコンパイルし、フォルダーに残るライブラリを作成しlibsます

2> .apk パッケージ内でも、そのライブラリはlibフォルダー内にとどまります

Javaファイル内で、次のコードでそのライブラリをロードできます

 static {
    System.loadLibrary("ndk_demo");
  }

質問 1: そのライブラリを .apk の一部として保持する代わりに、それを Android システムにインストールし、システムからアプリケーションをロードできる可能性はありますか?

質問 2:open GL Androidに インストール済みの他のライブラリを同じ方法で使用できますsqLiteか?

4

1 に答える 1

2

両方の質問に対する答えは、はい、できます。

Q1 : テストしたい場合は、この方法に従うことができます。

1) NDK を使用してソースコードをコンパイルします。

2) Android デバイスの /system/lib にあるライブラリをコピー (adb push) します。アプリケーションを実行します。

ライブラリをロードすると、apk ファイルの lib フォルダーまたはシステムの /system/lib フォルダーからチェックされます。ただし、/system/lib にコピーするには、ファイルシステムを再マウントする必要があります。これには、ルート権限が必要です。

Q2:

Q1への回答も同様に回答します。ライブラリが /system/lib に存在する場合は、既存のライブラリも呼び出すことができます。しかし、小さな問題があります。jni インターフェイスの命名規則に従う必要があるため、ライブラリ内の関数を直接呼び出すことはできません。したがって、最終的には「既存のライブラリを使用して独自のライブラリを作成する必要があります」。

手順は次のようになります。

ライブラリをプルする (adb pull)

既存のライブラリ (例: OpenGL) のルーチンを呼び出すネイティブ コードを記述します。

ビルド済みライブラリにリンクしてコードをコンパイルします (NDK ドキュメント ファイルを参照してください。これを行う方法は非常に明確に書かれています。コンパイル中に Android.mk ファイルで言及する必要があります)。

最後に、既存のライブラリを内部に含む共有ライブラリを取得します。

既存のライブラリの 1 つである libsqlite についても同じことを行いました。どこかで行き詰まっている場合は、お知らせください。ありがとう

于 2012-04-16T07:01:00.567 に答える