jni 入门 android的C编程之旅 ---环境搭建helloworld
需要進行jni的開發有一下幾個條件:
1:能初步使用C/C++如果不會,請參讀 譚浩強的 ?C編程語言
2:android應用開發已經基本入門,如果沒有,請先行學習
這兩個條件基本滿足后,我們開始了:
1:環境搭建
相信大家android開發環境是有的哦
A:給eclipse添加 C/C++文件。在 eclipse的help的install new software
B:由于我是windows平臺的環境(所以需要安裝一個 ?Cygwin 這個是來模擬我們的linux操作系統的,因為android底層就是一個linux操作系統)
C:安裝ndk(ndk是用來跨平臺編譯的 ? ?如果你C學的比較好的話,你會了解:在windows下編譯的C代碼是無法給java調用的,也無法放到linux系統使用(跨平臺性不如java))
這仨就自己百度一步一步搭建吧,由于比較大,我這放哪也不清楚,有機會我會把這些打包放到 ?網盤供大家下載的,現在大家還是先到其他地方找找教程,搭建一下環境,如果是從網絡下載順利的話,這個安裝過程可能需要1-2天
環境搭建完成了,接下來我們就寫一個helloworld吧:
看一下目錄結構:比我們正常的android應用多了一個 ?jni目錄
我們在里面寫了簡單的幾行c代碼:
Hello.c
?
#include <stdio.h> #include <jni.h>jstring Java_com_test_ndk1_MainActivity_helloFromJNI(JNIEnv* env, jobject obj){//輸出一個java字符串//返回一個java字符串//jstring (*NewStringUTF)(JNIEnv*, const char*);char* cstr = "helloFromJNI";return (**env).NewStringUTF(env, cstr);}?
注意,這個C可能和我們傳統的C編程不太一樣,后面我會詳細分解這個C怎么寫的。
然后,我們在我們的android的項目中去調它
編寫 ?Android.mk
?
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := Hello LOCAL_SRC_FILES := Hello.cinclude $(BUILD_SHARED_LIBRARY)
這個相當于一個跨平臺的make,熟悉linux的朋友一定知道 linux下的makefile這個玩意兒,不知道也就先不管了,后面會詳細解釋,這兒就先不說了
?
?
MainActivity
?
package com.test.ndk1;import com.test.ndk1.R;import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Toast;public class MainActivity extends Activity {//加載函數庫static{ System.loadLibrary("Hello");}//本地方法 由C實現public native String helloFromJNI();@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void click(View view){//調用c代碼Toast.makeText(this, helloFromJNI(), 0).show();}?
簡單的,點擊一個按鈕,彈出一個土司,土司內容是 ?C中的 helloFromJNI() 函數(C中我們通常說一個方法是函數,同一個概念)的返回值
然后,很簡單的布局文件:activity_main.xml
?
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent" ><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="調用C代碼"android:onClick="click"/></RelativeLayout>?
ok,項目寫完了,接下來的工作是編譯
打開cygwin,進入到工程的jni目錄下(linux如何進入一個目錄,自己稍微看下,和windows基本差不多,如果是要cygwin切換到C盤以外的目錄,那就先到根目錄,里面有個cygdrive的目錄,里面的d e f等就對應你的 D E F盤)
執行 ?ndk-build
編譯成功:
刷新一下工程,可以看到一個obj目錄:
然后ndk又幫我們將 libHello.so自動封裝到了 libs目錄下,自己可以打開看下哦,我就不上圖了
運行程序:
ok了,第一個helloworld到此結束,后面我會陸續分享一些原理性的東東給大家哦
?
轉載于:https://www.cnblogs.com/jiangu66/p/3243914.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的jni 入门 android的C编程之旅 ---环境搭建helloworld的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sublime Text的使用技巧
- 下一篇: WinForm中 事件 委托 多线程的应