Mac下安裝NDK,進行JNI開發
Android studio 整合NDK開發環境,只要設定ndk路徑。如果使用eclipse bundle開發,沒有NDK外掛,需要匯入jar包,和ADT外掛一樣。如果下載JavaEE for mac 64位,需要安裝ADT外掛才能開發android應用。下面介紹Mac下安裝如何NDK,進行JNI開發。
為什麼用AS開發,還要Eclipse幫襯?
有些專案是eclipse的,用它來閱讀專案原始碼或許有些必要,重要的是,我覺得它的NDK比Android Studio要成熟一些。所以還是要折騰下Eclipse NDK開發環境。
eclipse可以方便的為專案新增本地支援,add Native Support,然後就可以識別c/c++程式碼了,而且可以自定義編譯命令,確實比較方便。開發的時候最頭痛的就是一片紅。
一,Eclipse+NDK開發工具下載
1,Eclipse for Android &ADT bundle
連結: http://pan.baidu.com/s/1ge3pqs7 密碼: vbfw
裡面有mac和windows平臺的eclipse:adt-bundle-mac-x86_64-20140702
2,Eclipse的ndk外掛和NDK for mac
連結: http://pan.baidu.com/s/1dF6XyVZ 密碼: x3jv
版本為:android-ndk-r11b-mac-x86_64,ndk外掛為jar包。
二,安裝NDK,配置NDK路徑和環境變數
1,安裝NDK for mac
找到ndk的安裝包位置,進入該路徑,然後提升操作許可權,用./解壓。例如:
cd /Users/duqian/android-ndk
chmod a+x android-ndk-r10c-darwin-x86_64.bin
./android-ndk-r10c-darwin-x86_64.bin
2,配置ndk路徑
Android studio 設定ndk路徑,File>Project Structure>SDK Location 設定SDK,JDK,NDK路徑即可。
eclipse解壓出來就可以使用,在首選項裡面,設定ndk路徑。如果沒有ndk的外掛選項,就把ndk插的jar包,直接放到eclipse根目錄的plugins目錄下面。重啟eclipse生效。然後重新設定。
需要注意的是,新增本地支援後,如果ndk路徑改變,那麼原來jni目錄中,很多標頭檔案就找不到了,因為Eclipse記住了這些檔案的路徑。可以刪除eclipse隱藏檔案裡面的一些內容,最好是刪除重新匯入一次專案,或者重新構建。
3,新增ndk環境變數
請看我的另一文章: mac下配置JDK,SDK,NDK和ADB環境
三,終端使用ndk命令
1.生成標頭檔案.h
cd到專案的path/to/project/src目錄下使用javah命令。
cd /Users/duqian/AndroidMac/eclipse2016/HelloJNI/src
javah -jni com.example.hellojni.MainActivity
在專案project/bin/classes目錄下使用javah命令,容易出錯!
DuQian-MBP:classes duqian$ javah -jni com.example.hellojni.MainActivity
錯誤: 無法訪問android.app.Activity
找不到android.app.Activity的類檔案
不要傻傻的自己寫標頭檔案,低效又容易出錯。
2.ndk-build
ndk-build命令可以編譯jni目錄中的檔案為.so庫檔案。然後就可以給android呼叫了。
cd /Users/duqian/AndroidMac/eclipse2016/HelloJNI/jni
ndk-build
四,JNI開發,NDK專案實戰
也可以看我的另一文章:Android JNI技術, NDK開發
1,jni目錄寫c程式碼,這裡不使用生成的標頭檔案,直接寫。返回字串給andoird呼叫:
#include <string.h>
#include <jni.h>
jstring Java_com_example_hellojni_MainActivity_stringFromJNI(JNIEnv* env, jobject thiz)
{
return (*env)->NewStringUTF(env, "Hello from JNI!");
}
2,Android.mk配置檔案
eclipse中在專案中add Native Support後,jni目錄自動生成,其中就有這個檔案。簡單配置下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-ndk
LOCAL_SRC_FILES := hello-ndk.c
include $(BUILD_SHARED_LIBRARY)
3,android呼叫c程式碼:
public class MainActivity extends Activity {
// 宣告本地方法,位於hello-ndk.c
public native String stringFromJNI();
static {
System.loadLibrary("hello-ndk"); //匯入編譯後的.so庫
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
TextView tv = new TextView(this);
tv.setText(stringFromJNI()); //android 呼叫c語言返回的字串
setContentView(tv);
}
}
4,Application.mk檔案
常用的是APP_ABI,交叉編譯為對應平臺的.so庫檔案。
#註釋NDK的編譯系統根據 "armeabi" ABI生成機器程式碼。
APP_ABI := armeabi
比如:為了在ARMv7的裝置上支援硬體FPU指令。可以使用 APP_ABI := armeabi-v7a
如果是x86,則:
APP_ABI := x86
Application.mk檔案目的是描述在你的應用程式中所需要的模組(即靜態庫或動態庫)。
Application.mk檔案通常被放置在
五,NDK開發注意事項
Android.mk檔案是GNU Makefile的一小部分,用來對Android程式進行編譯。 因為所有的編譯檔案都在同一個 GNU MAKE 執行環境中進行執行,而Android.mk中所有的變數都是全域性的。因此,您應儘量少宣告變數,不要認為某些變數在解析過程中不會被定義。
Java程式碼中使用native關鍵字標示方法是JNI庫中的函式,編譯出來的JNI庫的名字是會加上lib,按照規範,System.loadLibrary中的引數是去掉lib和.so的。
未完待續,杜工,Dusan,Q291902259Mac下安裝NDK,進行JNI開發
相關文章
- [Android開發]Mac下NDK開發(JNI)AndroidMac
- JNI/NDK開發指南(1):JNI開發流程及HelloWorld
- JNI/NDK開發指南(開山篇)
- 利用IDEA進行JNI開發:使用NDK生成Linux平臺下的so檔案IdeaLinux
- Android NDK開發之JNI基礎Android
- JNI/NDK開發指南(4):字串處理字串
- Android NDK開發(二) 使用ndk-build構建工具進行NDK開發AndroidUI
- JNI/NDK開發指南(9):JNI呼叫效能測試及優化優化
- Android Studio NDK開發-JNI呼叫Java方法AndroidJava
- Android NDK開發之旅14 JNI 快取策略Android快取
- Android Studio ndk-Jni開發詳解Android
- Android NDK開發之旅15 NDK Eclipse下NDK開發流程AndroidEclipse
- NDK 知識梳理(1) 使用 CMake 進行 NDK 開發之初體驗
- Android NDK開發之旅14 JNI 異常處理Android
- Android Studio NDK開發:JNI呼叫Java函式AndroidJava函式
- Mac下安裝Phonegap開發環境Mac開發環境
- ubuntu下ndk的安裝和使用Ubuntu
- jni和ndk詳解
- 在anaconda python開發套件下進行opencv的安裝Python套件OpenCV
- 利用IDEA進行JNI開發:生成Windows平臺下的dll檔案IdeaWindows
- Android NDK開發之旅11 JNI JNI資料型別與方法屬性訪問Android資料型別
- 第1章 開發環境安裝和配置(二)安裝JDK、SDK、NDK開發環境JDK
- 通過JNI對C++進行封裝C++封裝
- Android NDK祕籍--初識NDK、JNI、Makefile/CMakeAndroid
- Mac OS X下開發軟體的安裝與配置Mac
- Mac下AndroidStudio3.x的NDK開發環境搭建MacAndroid開發環境
- NDK 知識梳理(2) 使用 CMake 進行 NDK 開發之如何編寫 CMakeLists txt 指令碼指令碼
- Android Studio ndk-Jni開發詳細入門,Aes加密demoAndroid加密
- JNI/NDK開發指南(2):JVM查詢java native方法的規則JVMJava
- JNI/NDK開發指南(8):呼叫構造方法和父類例項方法構造方法
- 簡單實現Android NDK編譯jni呼叫動態庫開發Android編譯
- JNI/NDK開發指南(3):JNI資料型別及與Java資料型別的對映關係資料型別Java
- Android NDK學習(2)Windows下NDK開發環境配置AndroidWindows開發環境
- Mac下Apache+MySQL+PHP開發環境安裝過程MacApacheMySqlPHP開發環境
- Mac下安裝brewMac
- mac下安裝homebrewMac
- Mac下安裝MongodbMacMongoDB
- Mac 下安裝pipMac