2010-12-05 14 views
1

プロジェクトでネイティブc/C++を使用する必要があるため、NDKを使用する必要があります。 eclipseで簡単に設定する方法はありますか?android projectのNDKの使い方は?

ありがとうございました。

答えて

4

私はしばらくの間実験をした後、初心者がNDKをEclipseで使い始める最良の方法は、最初にこのチュートリアルを参照してください:http://marakana.com/forums/android/examples/49.htmlとjniフォルダに必要なファイルを作成するだけです他に何もしないでください)。次に、このhttp://mobilepearls.com/labs/ndk-builder-in-eclipse/を読み、手順に従ってください。その後、あなたは準備が整いました。

+0

最初のリンクは古いです。/app /ディレクトリはもはや必要ではありません。あなたはAndroid.mkだけが必要で、ndk-buildはJust Workです。 – richq

14

は、次の手順

1があります。プロジェクトディレクトリ

2にJNIフォルダを作成します:ファイル名を作成Android.mkを新しく作成したフォルダにJNIをして作成しますCまたはC++の新しいファイルは、私たちがCファイルを使用していると考えることができ、ファイルの名前はMyNativeC.cです

3:今Android.mkファイルに次のコードを入力してください

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_LDLIBS := -llog 

LOCAL_MODULE := local_module_ndk // this is the name of local module by which you can call the Local source file 
LOCAL_SRC_FILES := MyNativeC.c// hear we can pass the name of your native file name hear we are use MyNativeC.c file so we pass the name of MyNativeC.c in local source file name 

include $(BUILD_SHARED_LIBRA 

4オープンしましMyNativeC.cファイルと 聞く私たちは今、あなたの活動場所を編集コード

#include <jni.h> 
#include <string.h> 
#include <stdio.h> 
#include <android/log.h> 

#define DEBUG_TAG "MY_NDK_DEMO" 


jstring Java_com_myNDKDemo_MainActivity_getString(JNIEnv * env, jobject this, jint value1, jint value2) 
{ 
    char *szFormat = "Addition : %i"; 
    char *szResult; 


    jlong sum = value1+value2; 


    szResult = malloc(sizeof(szFormat) + 20); 


    sprintf(szResult, szFormat, sum); 

    jstring result = (*env)->NewStringUTF(env, szResult); 


    free(szResult); 

    return result; 
} 

5次作成するには、(自分の活動から)あなたのAndroidコードから呼び出したい2つのメソッドを作成します

最初にネイティブコードのライブラリをロードする必要がある静的ブロックを作成します。私たちは、私の活動の名のコードがMainActivity.java

Cコードをコンパイルし、ため NDK development kitにあなたが持っている最初のCコードをコンパイルし、今

オープン

package com.myNDKDemo 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 

public class MainActivity extends Activity { 
    private static final String DEBUG_TAG = "MainActivity"; 


    private native String getStringAdd(int fist, int second); 

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

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     button b = new Button(this); 

     b.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 


          Toast.makeText(getApplicationContext(),""+getStringAdd(100,200), 2000).show(); 

     } 
    }); 

      setContentView(b); 

    } 
} 

6今最初であることを示し

聞きます走るそして、タイプは、今私たちが自動に入る押す

enter image description here

私のNDKのNDKビルドファイルパスのパスtypw今のパスにその後

In my case I create application in Destop, so hear we give the path of my app

を投影する行く

をcmdをあなたのプロジェクトにlibsディレクトリを作成します。 enter image description here

7プロジェクトに表示されている場合は、libs、objが自動的に作成されます。

8.Refresh(右クリック)JNIフォルダ(TEH NDKビルドを使用してそれをビルドするたびにリフレッシュし、これは実際のlibsフォルダに新しく建設された共有ライブラリをロードします。)

9。今すぐあなたのアンドロイドプロジェクトを実行し、ボタンを押すと、あなたに追加が表示されます

ありがとう

+0

ありがとうございます。私はあなたが一歩一歩説明した方法が本当に好きです。再度、感謝します。 –

+0

Android Studioを使用しているすべての人に、この例を実行しようとしています。 1./app/src/mainディレクトリに "jniLibs"という名前のフォルダを作成します 2.上記のチュートリアルを使用してモジュールをビルドしたら、libフォルダの内容をコピーします(おそらく "armeabi"別のアーキテクチャのために構築された)を "jniLibs"に置き換えてください。 これで動作します。 –