Android NDK開發簡單程式分享(Hello Word!)_Android

來源:互聯網
上載者:User

在之前的部落格中已經為大家介紹了,如何在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 := helloLOCAL_SRC_FILES := hello.cinclude $(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程式就算完工了,最後附一張圖:

上面提到的命令列方式產生.so檔案是不是感覺很麻煩,接下來請和我一起探究一下如何使用編譯工具eclipse完成上面的操作。

第一步:安裝ndk

安裝方式詳見Android NDK開發入門

第二步:配置eclipse

首先我們需要將ndk環境配置到eclipse:點擊 window-->perferences:

然後選擇Android-->ndk-->將我們的ndk安裝目錄添加進來:

到這裡我們的配置基本完成,最後給我們的工程配置一個啟動ndk-build的路徑,選擇我們的工程按右鍵選擇properties:

 

好了,我們的eclipse編譯ndk程式的配置就算大功告成,大家快去試一下吧,超級方便。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的協助,同時也希望多多支援雲棲社區!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.