DK: ネイティブ開発キット
NDKでできること:NDKは、JavaがアンドロイドのCライブラリを呼び出すことを可能にします。
NDKの理由:ご存知のように、javaはセミインタープリタ言語であり、ソースコードファイルを取得するために逆アセンブルすることは容易であり、いくつかの重要なプロトコルの開発では、安全であるために、システムのセキュリティを高めるために、これらの重要な部分を記述するためにC言語を使用しています。また、いくつかの密接なハードウェア環境では、我々はすべてCとJavaの長所と短所を知っていると思います。ちなみに:NDKは大幅にアプリケーションの効率を向上させることはできません。なぜですか?私たちは、javaに比べてC言語がはるかに効率的であると考え、一方では、jdkが常に更新され、Javaの効率も改善されている、他方では、C言語のコーディングの使用は、アプリケーションの効率を向上させる場合でも、javaとC言語では、プレーンでお互いを呼び出し、オーバーヘッドを増加させます。
これらの問題について、ここでこれ以上語ることはありませんし、詳しく知りたい方はご自身で検索してください。
NDKの開発、最初のステップはもちろん環境の構築です。
まず、 tools/sdk/ndk/.html アクセスし、お使いのプラットフォームの開発ツールをダウンロードしてください。
次に、linux環境を導入する必要があります cygwinのダウンロード
オンラインでダウンロードされる場合は、以下のアドレスを選択されることをお勧めします。
ダウンロードソースを選択した後、ダウンロードディレクトリを選択します。コンポーネントリストの "Devel "ブランチをマウスで開いてください。
必要なもの: binutils, gcc, gcc-mingw, gdb
4つのカタログが選ばれた後は、ほとんど夕食にたどり着くまで長い待ち時間です。
NDK環境変数は、システム環境変数にNDKルートディレクトリを追加する必要があります。
cygwin環境変数では、binディレクトリをシステム環境変数
環境の設定が完了したら、コーディングを開始できます。
1、新しいアンドロイドプロジェクトを作成します
2.プロジェクト・ディレクトリにjniという名前のフォルダを追加します。
3、新しい.cファイルの下のjniフォルダーで
4、jniフォルダのAndroid.mkファイルの新しい名前の下にあります。
.mkファイルに
LOCAL_PATH := $(call my-dir) //現在のパス
include $(CLEAR_VARS)
LOCAL_MODULE := Hello //を生成する.so
LOCAL_SRC_FILES := Hello.c //.cファイル名
include $(BUILD_SHARED_LIBRARY)
これでCのコードを書き始めることができます。もちろん、メイン関数から書き始めることはできませんが、決まった命名規則があります。
こんな長い関数名を書くと、C言語の友人から文句を言われるかもしれません。いえいえ、これはjniの仕様で、Java_で始まり、Javaアプリケーションのパッケージ名とクラス名がアンダースコアで区切られ、最後にCの関数名が続きます。
パラメータの形式や戻り値の型については、jdkディレクトリのjni.hファイルを見てください。
ソースコードが多すぎるので、写真は掲載しません。
jni.hファイルの104行目で、jstringのreturnが本質的に構造体ポインタであることがわかります。Cのコードから、これが文字列へのポインタであることがわかりますが、Javaでは配列でもあります。
さて、Cコードの説明は終わり、アンドロイドのプロジェクトに戻ります。
図の赤枠の静的コードブロックに注目してください。
私たちはすべて知っているJavaを学び、最初の実行の初期化でクラスはコンストラクタではなく、静的なコードブロックは、その権利の理由の静的なコードブロックにSystem.loadLibrary()にここに理由です。名前から推測することができ、ライブラリをロードします。
Android.mkで宣言されたHelloを思い出してください。
すぐにコードの12行目を見た後、ネイティブ修飾メソッドで、Javaの知識を思い出して、つまり、Javaのネイティブメソッドは、C関数です。あなたがよくオーディオドライバを呼び出す必要があるため、このような一般的に使用されるマルチメディアクラスMediaPlayerなど、珍しいことでは、ソースコードを見に行くことができ、ここで私は、ネイティブメソッドの多くを持って送信されません。
この時点でNDKプロジェクトは完成です。まず、Cコードをコンパイルします。cmd を開き、プロジェクトのディレクトリに移動して ndk-builder と入力します。
その後、Androidプロジェクトをもう一度実行してください。
最後に、私はもう少し自分の見解を言うと、まず第一に、C言語の基礎であり、構造ポインタをよく習得する必要があり、jni.hファイルをよく見て、また、CとJavaの相互作用関数をサポートしてどのような関数を与える、良いNDKを使用するには、最初の良いJNIを使用します!