Android JNI入門第一篇——HelloJni

來源:互聯網
上載者:User

         android支援使用NDK開發C程式,關於配置NDK環境問題應該不用再贅述了,這個網上有很多,這裡通過一篇執行個體來講述簡單的JNI開發,大家可以參考這篇文章(Get Your Eclipse-Integrated NDK On!)搭建Eclipse編譯C語言為so檔案的開發環境。

        native方法實現步驟如下:

        1、在Java中聲明native()方法,然後編譯(javac); 

      2、用javah產生一個.h檔案; 

      3、編寫包含.h檔案的c檔案

      4、編譯c檔案

      5、使用編譯成功的so檔案。

 

       第一步:

              1、聲明native方法

                 

public class Printf_Jni { static {        System.loadLibrary("com_nedu_jni_helloword_printf-jni");    }public native void printHello();}

       2、javac編譯

            進入java檔案所在路徑,調用javac命令,

            

第二步:使用javah命令產生.h標頭檔,

          

     這個要回到src目錄下,不知道什麼原因,如果在上面的javac路徑下會報錯,

      

      使用javah命令產生的標頭檔如下:

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_nedu_jni_helloword_Printf_Jni */#ifndef _Included_com_nedu_jni_helloword_Printf_Jni#define _Included_com_nedu_jni_helloword_Printf_Jni#ifdef __cplusplusextern "C" {#endif/* * Class:     com_nedu_jni_helloword_Printf_Jni * Method:    printHello * Signature: ()V */JNIEXPORT void JNICALL Java_com_nedu_jni_helloword_Printf_1Jni_printHello  (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif

第三步:編寫c檔案,代碼如下:

#include<stdio.h>  #include <stdlib.h>  #include "com_nedu_jni_helloword_Printf_Jni.h"  JNIEXPORT void JNICALL Java_com_nedu_jni_helloword_Printf_1Jni_printHello  (JNIEnv *e, jobject j)  {      printf("Hello world!"); }  

第四步,書寫Android.mk檔案,編譯c檔案
        Android.mk檔案如下:

     

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := com_nedu_jni_helloword_printf-jniLOCAL_SRC_FILES :=Printf_Jni.cinclude $(BUILD_SHARED_LIBRARY)

LOCAL_MODULE    := com_nedu_jni_helloword_printf-jniLOCAL_MODULE    := com_nedu_jni_helloword_printf-jniLOCAL_MODULE  表示so檔案名稱

LOCAL_SRC_FILES 需要編譯的檔案

按照這篇文章(Get Your Eclipse-Integrated NDK On!)的介紹就可以在Eclipse編譯了。

第五步:使用so檔案:

    通過下面的代碼載入so檔案

System.loadLibrary("com_nedu_jni_helloword_printf-jni");

通過下面的代碼載入so檔案通過下面的代碼載入so檔案

調用如下:

Printf_Jni print=new Printf_Jni(); 
print.printHello();

 

 

 

/**
* @author 張興業
* 郵箱:xy-zhang#163.com
* android開發進階群:278401545
*
*/

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.