日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jni 入门 android的C编程之旅 ---环境搭建helloworld

發布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。