blog

Android NDKの開発は、あなたが思うほど難しくはない!

なぜNDKを使用する:我々はすべて知っているように、Javaは半解釈言語であり、それはいくつかの重要なプロトコルの開発では、安全であるために、ソースコードファイルを取得するために逆アセンブルすることは...

Mar 2, 2014 · 4 min. read
シェア

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を使用します!

Read next