Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android NDK開發Hello Word!,androidndk

Android NDK開發Hello Word!,androidndk

編輯:關於android開發

Android NDK開發Hello Word!,androidndk


  在之前的博客中已經為大家介紹了,如何在win環境下配置DNK程序,本篇我將帶大家實現一個簡單的Hello jni程序,讓大家真正感受一下NDK開發的魅力。這裡我們選擇使用C+JAVA開發Android程序,首先你必須了解C語言、JAVA語言以及Linux操作系統,這樣可以幫助你開始上手,當然不是說你必須是大牛才能進行NDK開發,下面我們來一起實現一個簡單的NDK程序。

  第一步,創建Android工程

  打開開發環境eclipse,在左側空白區域,右鍵單擊創建Android工程(非常簡單,不再贅述)。

  第二步,編譯頭文件

  打開我們的主Activity,在裡面定義一個native類型的方法:

public class MainActivity extends Activity {
    
    public static native String getStringFromC();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

  創建好我們的Android工程後,並定義好方法之後,然後在目錄下新建一個jni目錄,之後點擊運行輸入cmd回車-->通過cd命令進入當前的工程目錄

  

  然後通過javah命令生成我們的頭文件,下面先看一下javah命令吧:

  

  這裡我們主要使用到-d、-jni、 -classpath,下面我們來生成我們的頭文件,在命令行輸入:javah -classpath bin/classes -d jni com.edu.hpu.jni.MainActivity

  

  遇到這個問題是因為我們的calsspath在編譯時,沒有找到Android.jar文件導致的,錯誤信息如下:

  

  這個問題很好解決,第一種方式,我們在環境變量calsspath下添加一個Android.jar文件的目錄即可,Android.jar文件存在於我們的Android SDK文件夾,platforms文件夾下存在很多Android版本,我們任意選一個打開,我們就找到了我們需要的Android.jar文件,然後將地址配置到環境變量classpath下即可;第二種方式我們在命令行設置一個路徑即可:

  

  這樣我們的頭文件就生成了,最下化我們的命令行窗口,因為隨後我們還要使用,完成上面的操作,我們刷新一下工程,這是在jni目錄下會對一個頭文件:com_edu_hpu_jni_MainActivity.h(文件名因工程而異),下面我們在jni目錄下新建一個.c文件:

#include <stdio.h>
#include <stdlib.h>
#include "com_edu_hpu_jni_MainActivity.h"

JNIEXPORT jstring JNICALL Java_com_edu_hpu_jni_MainActivity_getStringFromC(JNIEnv* env, jclass this){
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}
Java_com_edu_hpu_jni_MainActivity_getStringFromC簡單說一下這個名字,Java_是固定前綴,com_edu_hpu_jni_MainActivity:主activity包名+類名,getStringFromC:方法名
這裡為了防止我們寫錯,我們打開剛剛生成的頭文件,從裡面拷貝出來:
   
  到這裡我們的任務即將完成,下面我們將之前demo工程的jni目錄下的Android.mk拷貝到我們的工程jni目錄下,然後雙擊打開:
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello
LOCAL_SRC_FILES := hello.c

include $(BUILD_SHARED_LIBRARY)

  LOCAL_MODULE:指我們.c文件的訪問標記;LOCAL_SRC_FILES:指我們在jni目錄下新建的.c文件。

  最後我們需要在我們的主Activity中進行調用.C類庫:

public class MainActivity extends Activity {
    
    static{
        System.loadLibrary("hello");
    }
    
    public static native String getStringFromC();
    private TextView text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = (TextView) findViewById(R.id.hello);
        text.setText(getStringFromC());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

  做完上面的工作,我們打開我們的命令行窗口,輸入ndk-build編譯生成.so類庫

  

  

  操作成功後,我們刷新一下工程,會發現obj目錄下增加了一個.so文件:

  

  然後我們點擊運行工程,這樣我們的第一個NDK程序就算完工了,最後附一張圖:

  

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved