Eclipse NDK開発のHelloWorld


NDKのフルネームはNative Development Kitで、NDKは開発者がC/C++のダイナミックライブラリを迅速に開発し、soとJavaアプリケーションを自動的にapkにパッケージ化するためのツールを提供しています.ndk開発環境を構築するために、2日間かかりました.ネットワークには多くのドキュメントがありますが、ほとんどが古いので、コマンドラインの下で操作する必要があります.私はテストを経て、新しいバージョンのsdk、ndkを使用して、コマンドラインの操作を全く必要としないことを発見しました.雑談はさておき、私がまとめた構築過程と、私の最初のndkベースのHelloWorldプログラムについてお話しします.
1.Android開発環境の確認
標準Eclipseを使用して、Android環境をインストールします.例えば私のandroid開発環境は以下の通りです.
Eclipse Version: Mars.2 Release (4.5.2) Android SDK: Android 6.0 (API level 23) ADT Version: 23.0.4.1468518
2.ndkをダウンロードし、eclipseでパスを設定する
ndkをダウンロードして、解凍します.私のndkバージョン:android-ndk-r 10 b.次にEclipseを開き、Window->Preferences->Android->NDKをオンにし、さっきのndk解凍パスにNDKパスを設定します.
3.インタフェースクラスの作成
まず通常の手順に従ってandroidのhelloWorldプロジェクトを構築し、実行可能であることを検証します.このパッケージの下に、JniClientクラスを新規作成します.インタフェースを宣言します(後で開発し、新しいインタフェースを追加できます):
static public native String sayHello();

4.Androidプロジェクトを構成するNativeSupport
項目を右クリックし、Android ToolsでAdd NativeSupportをクリックし、ライブラリ名を指定します.注意名前付きライブラリ名には制限があり、下線「」は使用できません.下線「」が引かれているのでは、jniにおける関数名分割の識別です.私はhelloを使ったことがありますworldは庫名として、ちょうど中技で、穴に落ちて長い間這い出せなかった.デフォルトのライブラリ名「HelloWorld」を使用して、確認をクリックします.自動的に生成されますcppとAndroid.mk. Android.mkは修正する必要はありません.
5.ハローワールドを修正する.cpp、インタフェース機能を実現
コードは次のとおりです.
#include <jni.h>
extern "C" {
JNIEXPORT jstring JNICALL 
Java_com_example_helloworld_JniClient_sayHello(JNIEnv *env, jclass)
{
    return env->NewStringUTF("Hello JNI!");
}
}

注意2点:(1)C/C++定義の方法は、Java+パッケージ名+activity名+あなたの関数名で、各部分の間に下線を引く必要があります.接続し、パラメータも固定します.したがって、C/C++関数を定義する固定フォーマットは、Java_PackageName_ActivityName_function(JNIEnv*env,jobject obj){...}(2)ここでextern「C」が必要です.追加しないと実行時にクラッシュします.
6.メインプログラムの変更、インタフェースの呼び出し
元のプログラムが実行されると、デフォルトの出力は「HelloWorld」になります.出力を変更し、cppの戻り内容を使用します.res->layout->activity_main.xmlでは、TextViewにidを追加し、javaコードで呼び出します.その他は変更しません.xmlにidを追加するには:
android:id="@+id/tv_say_hello"

MainActivity.JAvaでは、動的に値を割り当てます.
        TextView tv_say_hello = (TextView) findViewById(R.id.tv_say_hello);
        tv_say_hello.setText(JniClient.sayHello());

次に、ライブラリの参照を追加します.参照名はAdd NativeSupportのときに記入したクラス名で、デフォルトはプロジェクト名と同じです.Androidを見ることもできます.mk下LOCAL_MODULEに対応する値.例えば私の場合:
LOCAL_MODULE := HelloWorld

次のコードを追加します.
    static {
        System.loadLibrary("HelloWorld");
    }

7.エンジニアリングコンパイル、プログラムの実行
前の設定が正常であればlibHelloWorldをコンパイルできます.so了.eclipseのConsoleに情報を出力します.
[armeabi] Compile++ thumb: HelloWorld <= HelloWorld.cpp [armeabi] StaticLibrary : libstdc++.a [armeabi] SharedLibrary : libHelloWorld.so [armeabi] Install : libHelloWorld.so => libs/armeabi/libHelloWorld.so
シミュレータ上で実行する、x 86上で実行するライブラリが必要な場合は、Applicationを追加する必要がある.mk、そうでないと他のいくつかのプラットフォームの下でコンパイルできません.义齿mkには一言しかありません.
APP_ABI := all

通常のコンパイル後、実行効果はTextViewの出力内容が「Hello JNI!」になります.
8.Demoダウンロード
コード・インスタンスは、次のアドレスからダウンロードできます.http://download.csdn.net/detail/lintax/9555897