Android技術2:NDK開發之Helloworld,androidndk

來源:互聯網
上載者:User

Android技術2:NDK開發之Helloworld,androidndk

     我們都知道在Android中編寫應用程式的主要代碼使用Java,然後Java自身某些不足,如Java代碼都運行在虛擬機器上面,處理速度相對C/C++來說比較慢,但是隨便近年來即時編譯器,虛擬機器技術的發展,Java處理速度有很大的發展。還有在遊戲視頻處理方法,需要短時間內大量的計算,這個Java無法做到;C語言發展以來有了很多開源的庫,供大家使用,但如果應用到android中,為了避免再重新用Java改寫的麻煩,Android推出了NDK技術,它能將C語言編譯成Linux下可以啟動並執行二進位檔案(.so)。

     對於環境的搭配具體不在介紹,可以參考其他部落格文章,已經講得非常詳細了。

1.開發工具

     首先簡單的介紹下開發的工具,在準備學習NDK技術時,必然之前一些Android方法的基本已經大致瞭解,當然已經搭配JDK,Eclipse,ADT等工具。如果準備學習NDK還需要下載NDK,下載安裝Cygwin(類比Linux環境用的),下載CDT(Eclipse C/C++開發外掛程式)。

2.NDK之Helloworld的步驟介紹

2.1建立android項目  

這裡我使用項目名:AndroidNDK

包名:com.forsta.ndk;  (這裡包名需要注意跟後面的c語言函數名相關)

2.2在工程目錄下,建立目錄檔案夾-jni,在這裡添加c語言代碼和Andorid.mk

2.3在Java代碼中添加native方法

我在MainActivity中添加 public native String FromCString();

2.4添加c語言代碼

由於C語言代碼函數名與包名,類名,方法名相關,書寫不變,可以利用javah工具實現

可以先建立MainActivty.java檔案

package com.forsta.ndk;
class MainActivity{
public native String FromCString();
}

通過javac MainActivity.java編譯,獲得MainActivity.class

然後通過javah MainActivity

得到com_forsta_ndk_MainActivity.h

代碼如下

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_forsta_ndk_MainActivity */

#ifndef _Included_com_forsta_ndk_MainActivity
#define _Included_com_forsta_ndk_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_forsta_ndk_MainActivity
* Method: FromCString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_forsta_ndk_MainActivity_FromCString
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

上麵灰色背景即為函數名

可以幫.h標頭檔放到jni目錄下,然後建立Hello.c

#include <stdio.h>
#include <jni.h>
#include "com_forsta_ndk_MainActivity.h"

/*
* Class: com_forsta_ndk_MainActivity
* Method: FromCString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_forsta_ndk_MainActivity_FromCString
(JNIEnv *env, jobject obj){

return (*env)->NewStringUTF(env,"Hello,I am Forsta from C lib!");

}

2.5添加Android.mk

下面是最簡單的mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c

include $(BUILD_SHARED_LIBRARY)

2.6cygwin下編譯c語言檔案

2.6.1Cygwin移動到項目工程目錄下

2.6.2使用ndk-build編譯

2.6.3重新整理工程

得到obj ,lib目錄

 

2.7運行android程式

2.8點擊Button效果

 


Android ndk開發出現No implemetation found問題





 
android eclipse 開發 helloworld 錯誤

你的hello的SDK coe是8也就是andropid 2.2,然後你運行在android2.1的模擬器,放然不行了
 

聯繫我們

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