android調用ndk
❶ 如何使用ndk進行android開發
Android之NDK開發
一、NDK產生的背景
Android平台從誕生起,就已經支持C、C++開發。眾所周知,Android的SDK基於java實現,這意味著基於
Android SDK進行開發的第三方應用都必須使用Java語言。但這並不等同於「第三方應用只能使用Java」。在Android SDK首次發布
時,Google就宣稱其虛擬機Dalvik支持JNI編程方式,也就是第三方應用完全可以通過JNI調用自己的C動態庫,即在Android平台
上,「Java+C」的編程方式是一直都可以實現的。
不過,Google也表示,使用原生SDK編程相比Dalvik虛擬機也有一些劣勢,Android SDK文檔里,找不到任何JNI方面的幫
助。即使第三方應用開發者使用JNI完成了自己的C動態鏈接庫(so)開發,但是so如何和應用程序一起打包成apk並發布?這裡面也存在技術障礙。比如
程序更加復雜,兼容性難以保障,無法訪問Framework API,Debug難度更大等。開發者需要自行斟酌使用。
於是NDK就應運而生了。NDK全稱是Native Development Kit。
NDK的發布,使「Java+C」的開發方式終於轉正,成為官方支持的開發方式。NDK將是Android平台支持C開發的開端。
二、為什麼使用NDK
1.代碼的保護。由於apk的java層代碼很容易被反編譯,而C/C++庫反匯難度較大。
2.可以方便地使用現存的開源庫。大部分現存的開源庫都是用C/C++代碼編寫的。
3.提高程序的執行效率。將要求高性能的應用邏輯使用C開發,從而提高應用程序的執行效率。
4.便於移植。用C/C++寫得庫可以方便在其他的嵌入式平台上再次使用。
三、NDK簡介
1.NDK是一系列工具的集合
NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,並能自動將so和java應用一起打包成apk。這些工具對開發者的幫助是巨大的。
NDK集成了交叉編譯器,並提供了相應的mk文件隔離CPU、平台、ABI等差異,開發人員只需要簡單修改mk文件(指出「哪些文件需要編譯」、「編譯特性要求」等),就可以創建出so。
NDK可以自動地將so和Java應用一起打包,極大地減輕了開發人員的打包工作。
2.NDK提供了一份穩定、功能有限的API頭文件聲明
Google明確聲明該API是穩定的,在後續所有版本中都穩定支持當前發布的API。從該版本的NDK中看出,這些API支持的功能非常有限,包含有:C標准庫(libc)、標准數學庫(libm)、壓縮庫(libz)、Log庫(liblog)。
❷ android 中怎麼使用ndk
程序中一些邏輯是用C寫的,使用jni調用C代碼,使用基本的打log的方式很難查看大型數組,了解到android ndk sdk中有個工具叫ndk-gdb可以很方便地對c代碼進行調試,使用過程並不順利,遇到兩個錯誤,耗時一周終於解決。如果是在windows下,需要安裝cygwin。首先,在cygwin命令行下進入到你工程的根目錄下如果你要調試的程序已經在運行了,直接運行ndk-gdb
如果你要調試的程序沒有運行,可以使用ndk-gdb --start
鍵入ndk-gdb命令,會出現一系列庫文件載入的信息,這些庫可能會載入失敗,不過沒有關系
出現<gdb>提示符,輸入help命令可以查看一系列命令使用l命令列出c文件的內容,但是遇到 No symbol table is loaded. Use the "file" command.使用以下命令載入需要調試的so文件:
file obj/local/armeabi/libsearch-algorithm.so使用list或者l可以查看載入的c文件。使用b 100,在c文件的第100行設置斷點。
使用c或者continue命令繼續運行程序。
出現錯誤:Continuing.
Warning:Cannot insert breakpoint 1.
Error accessing memory address 0x11a0: Input/output error.錯誤原因:使用ndk-gdb --start 啟動程序第一個activity,但是此時so文件並沒有被載入。
解決方法:首先打開程序並使用,在保證so文件已經被使用的情況下,調用ndk-gdb命令調試程序進程。
正確流程:
1.創建一個模擬器或者使用真機運行想要調試的程序,確保so文件已經被載入。
2.在此程序的根目錄下調用ndk-gdb,出現gdb提示符。
3.使用l命令,應該可以列印出c文件。
4.使用b 10,可以在c文件的第十行列印斷點。
5.使用c命令恢復程序運行。
❸ 如何在Android NDK中調用第三方庫文件
1.在project/jni目錄下創建prebuilt子目錄(目錄名可自定義).
2.將第三方.so放到prebuilt中,並創建Android.mk, 內容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := xxx
LOCAL_SRC_FILES := libxxx.so
include $(PREBUILT_SHARED_LIBRARY)
3.在project/jni/Android.mk中加入
LOCAL_SHARED_LIBRARIES := xxx
4.在project/jni/android.mk的最後加入
include $(LOCAL_PATH)/prebuilt/Android.mk
5.運行cygwin, 到project目錄下, 運行$NDK/ndk-build
❹ 「Android NDK 」是什麼,在什麼情況下使用
Android 應用是在dalvik虛擬機中運行的。NDK可以讓你使用本地代碼語言來開發應用,比如說C/C++,這種方法對某些類型的應用的是有好處的,可以充分利用本地代碼和在某些情況下加速代碼的執行。
對於絕大多數的應用來說,使用NDK並不是一個明智的選擇,作為一個開發者,我們需要衡量它所帶來的好處和缺點。使用本地代碼並不一定可以使性能得到優化,但是通常使得應用代碼變得復雜。一般來說,我們將應用中關鍵部分的代碼用C/C++寫,而不能由於我們習慣於用C/C++開發而把所有的代碼都用C/C++來實現。
有下面這些特點的應用可以考慮使用NDK:
1 獨立的,不和其他應用有關系的
2 頻繁佔用CPU但是申請的內存空間不是很大的操作,像信號的處理,物體的模擬等等
簡單的用C/C++重寫我們的代碼是不會帶來很大的性能提升的。
在考慮是否採用本地代碼開發的時候,要結合應用的實際需求並且看看Android 的framework層是否提供了我們需要的API,但是用NDK可以充分利用本地已經有的代碼。
Android framework提供下面兩種方法來使用本地代碼:
1 在Android framework的框架下面開發應用,使用JNI的方法來使用NDK本地方法提供的API。這樣的好處就是我們可以很好的利用的Android的framework提供的框架,但是需要編寫本地具體實現的代碼。這樣的APK可以在Android 1.5及其之後的版本上面運行。
2 寫一個本地的Activity,在本地代碼中實現生命回調函數,AndroidSDk提供了
類,這個類可以方便的讓你在你的本地代碼中實現回調函數(OnCreate,OnPause),從而當這些事件發生的時候處理。
❺ android ndk怎麼使用
android ndk的使用:
一、NDK是一系列工具的集合。
1、 NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,並能自動將so和java應用一起打包成apk。這些工具對開發者的幫助是巨大的。
2、NDK集成了交叉編譯器,並提供了相應的mk文件隔離平台、CPU、API等差異,開發人員只需要簡單修改mk文件(指出「哪些文件需要編譯」、「編譯特性要求」等),就可以創建出so。
3、NDK可以自動地將so和Java應用一起打包,極大地減輕了開發人員的打包工作。
二、NDK提供了一份穩定、功能有限的API頭文件聲明。
Google明確聲明該API是穩定的,在後續所有版本中都穩定支持當前發布的API。從該版本的NDK中看出,這些API支持的功能非常有限,包含有:C標准庫(libc)、標准數學庫(libm)、壓縮庫(libz)、Log庫(liblog)。
❻ 如何在Android studio下調試ndk
一: 先看看用 ndk-gdb 手動調試
這種方法只適用於手動編寫 Android.mk 的情況,因為我們要手動 build debug 版本的 .so 文件。具體可以參考我的前一篇文章。
1 AndroidManifest.xml android:debuggable 設置為 true
2 切換到 jni 目錄下執行 ndk-build NDK_DEBUG=1
http://www.cnblogs.com/lesliefang/p/5163148.html
❼ AndroidStudio如何配置NDK/JNIAndroidStudio怎麼調用so動態鏈接庫
AndroidStudio怎麼調用so動態鏈接庫?在我們日常開發中,經常會用到一些復雜的加密的演算法以保證通信的安全。通常這些演算法會用C或C++實現後打包成.so動態鏈接庫並向Java層開發介面方便調用。
以AndroidStudio為例
1 . 首先去下載NDK包,下載路徑如下可根據自己系統定點下載
https://developer.android.google.cn/ndk/downloads/index.html
static{
System.loadLibrary("jnitext");
}
publicnativeStringget_1111CLang_1String();
❽ 如何在Android studio下調試ndk
千鋒扣丁學堂Android開發為您解答:第一步:下載AndroidNDK。第二步:為project設置ndk路徑,在local.properties中,添加ndk.dir=。第三步:修改build.gradle文件。第四步:創建jni文件。第五步:創建測試類文件。第六步:創建.h文件。創建.cpp文件。第七步:進行測試