国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

記錄Android studio JNI開發的三種方式(推薦)

2019-10-22 18:20:03
字體:
來源:轉載
供稿:網友

概述

在Andorid Studio不支持JNI開發之前大家一般都是使用Eclipse開發JNI,各種配置讓人覺得很蛋疼。從Andorid Studio支持JNI開發后,讓我們開發JNI變的如此簡單。

NDK 和 JNI介紹

JNI (Java Native Interface)是一套編程接口,用來實現Java代碼和其他語言(c、C++或匯編)進行交互。這里需要注意的是JNI是JAVA語言自己的特性,也就是說JNI和Android沒有關系。在Windows下面用JAVA做開發也經常會用到JNI,例如:讀寫系統注冊表等。

NDK(Native Development Kit)是Google提供的一套工具集,可以讓你其他語言(C、C++或匯編)開發 Android的 JNI。NDK可以編譯多平臺的so,開發人員只需要簡單修改 mk 文件說明需要的平臺,不需要改動任何代碼,NDK就可以幫你編譯出所需的so。

用JNI做應用開發難度要比JAVA難很多,門檻也要高很多,如果你對C/C++把握的不好應用還會出現難以發現的Bug!所以通常在對性能要求比較高才會使用。游戲引擎就是一個對性能要求極高的例子。另外就是如果你想把核心的一些算法或處理邏輯保護起來,選用JNI也是一個不錯的方案。

下面給大家記錄Android studio JNI開發的三種方式,具體內容如下所示:

第一種        

  第一步: 創建natice本地方法       第二步: 在工程App模塊目錄下創建jni文件夾       第三步: 在jin文件夾中創建.c結尾的c文件,編寫c代碼,在c語言中定義在Java代碼中創建的本地方法(natice方法)        ,要按照jni的規范定義方法(Java_包名_類名_natice方法名,其中包名中的點用_代替)       第四步: 在jni文件夾中創建Android.mk文件,文件內容如下       LOCAL_PATH := $(call my-dir)       include $(CLEAR_VARS)       LOCAL_MODULE  := hello #指定生成的庫名 lib庫名.so       LOCAL_SRC_FILES := hello.c #指定要編譯的C語言源文件 多個空格排開       include $(BUILD_SHARED_LIBRARY) #指定生成庫類型(靜態庫 動態庫 獨立程序) 動態庫       第五步: 在src文件夾下創建Application.mk,內容如下       APP_ABI := all #指定生成庫平臺       第六步: 編譯c代碼生成so庫,到c代碼所在的目錄里面按住shift點擊鼠標右鍵,        選中在此處打開命令窗口(首先你要把ndk-build配置到環境變量中),執行ndk-build,        會自動生成Application.mk配置的so庫       第七步: 在App模塊下配置jinLibs的路徑執行libs             sourceSets{              main{                    jniLibs.srcDirs=[“libs”]                 }                }        第八步: 靜態代碼塊加載            Static{                    System.laodLibrany(“hello”)               }       第九步:運行

第二種

第一步: 創建natice本地方法第二步: 選中APP模塊點擊鼠標依次選擇new->folder->JNI folder->finish會在main目錄下生成一個jni文件夾第三步: 在jin文件夾中創建.c結尾的c文件,編寫c代碼,在c語言中定義在Java代碼中創建的本地方法(natice方法),要按照jni的規范定義方法(Java_包名_類名_natice方法名,其中包名中的點用_代替)第四步: 在模塊的build.gradle deflautConfig標簽中配置庫名和指定生成的平臺 ndk{   moduleName “hello”//生成的庫名   abiFilters “armeabi”,”armeabi-v7a”,”x86”//生成的平臺 }第五步: 靜態代碼塊加載  Static{     System.laodLibrany(“hello”)  }第六步:運行

第三種(Cmake)as版本2.2之后才可以使用

第一步: 創建natice本地方法第二步:在main下面創建cpp文件夾,再在cpp文件夾中穿件c源文件  按jni規范編寫被java調用的方法第三步:創建CMakelists.txt文件,里面配置了生成的庫名和連接的庫名還有c代碼的路徑(CMakelists.txt生成方式,要新建一個項目一定要選中include c++ suppot,選中之后創建的工程中就會有CMakelists.txt文件,并且還有Google給出的例子)第四步: 選中模塊點擊鼠標右鍵,選中link c++ progect with gradle之后彈出Cmake對話框,選擇CMake方式,再找到模塊下生成的CMakeLists.txt之后ok如果報錯了檢查CMakeLists.txt是否配置錯了,如果沒有報錯就添加成功了,會在build.gradle生成externalNativeBuild標簽第五步:配置生成的so庫平臺,在deflautConfig標簽下面創建externalNativeBuild標簽 externalNativeBuild{  cmake{    abiFilters “armeabi”,”armeabi-v7a”,”x86”//生成的平臺  } }配置完成用靜態代碼塊的方式加載so庫  Static{    System.laodLibrany(“hello”)  }

可能出現的錯誤

1, No implementation found for  意思是函數沒有實現,            1,檢查c中的方式是否正確(按jni規范)            2,是否靜態加載了庫,庫名是否寫錯2, > Error: Your project contains C++ files but it is not using a supported native build system.Consider using CMake or ndk-build integration with the stable Android Gradle plugin:大概意思是你的ndk不是最新的          1,下載一個最新版本的ndk          2,在gradle.properties中配置          Android.useDeprecatedNdk=true(允許使用過時ndk)

總結

以上所述是小編給大家介紹的記錄Android studio JNI開發的三種方式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天等县| 玉林市| 乐亭县| 仪陇县| 客服| 咸阳市| 邯郸县| 牡丹江市| 视频| 即墨市| 乐都县| 永定县| 凯里市| 大荔县| 青冈县| 亚东县| 海盐县| 谢通门县| 吉木乃县| 东丰县| 奉化市| 余姚市| 武宁县| 察隅县| 甘孜县| 天祝| 翁牛特旗| 奉化市| 安塞县| 巴东县| 鹰潭市| 喀什市| 津市市| 右玉县| 甘肃省| 威宁| 抚宁县| 屏南县| 上虞市| 沧源| 邢台市|