當前位置:首頁 » 安卓系統 » androidndk調試

androidndk調試

發布時間: 2023-08-21 20:31:22

❶ android ndk是什麼

android是安卓的縮寫,NDK是日本電波工業株式會社的英文縮寫,Android NDK 是在SDK前面又加上了「原生」二字,即Native Development Kit,因此又被Google稱為「NDK」。

Android程序運行在Dalvik虛擬機中,NDK允許用戶使用類似C / C++之類的原生代碼語言執行部分程序。NDK包括以下方面:

1、從C / C++生成原生代碼庫所需要的工具和build files。

2、將一致的原生庫嵌入可以在Android設備上部署的應用程序包文件(application packages files ,即.apk文件)中。

3、支持所有未來Android平台的一系列原生系統頭文件和庫。

(1)androidndk調試擴展閱讀:

NDK的產品優勢:

1、NDK擁有培育人工水晶的豐富經驗。而好的人工水晶決定了優質晶振產品的一半的品質。

2、NDK晶振產品尺寸、規格全面,既可滿足中小型、超小型電子元器件的要求,也適用於各類規格要求的細分市場。

3、NDK晶體諧振器、晶體振盪器具有非常優越的頻率一致性和穩定性。特別在汽車電子市場,即使在嚴峻的寬溫(-40度到150度)和震動撞擊環境下,都能保持良好的穩定性。

參考資料來源:網路:NDK

❷ android ndk有什麼用

NDK (Native Development Kit)是什麼?
NDK是一系列工具的集合,幫助開發者快速開發C(或C++)的動態庫,並能自動將so和java應用一起打包成apk。這些工具對開發者的幫助是巨大的。NDK集成了交叉編譯器,並提供了相應的mk文件隔離CPU、平台、ABI等差異,開發人員只需要簡單修改mk文件(指出「哪些文件需要編譯」、「編譯特性要求」等),就可以創建出so。NDK可以自動地將so和Java應用一起打包,極大地減輕了開發人員的打包工作

Android NDK的作用?
我們知道在Android上層APP應用都是通過java寫出來的.但是當我們設計游戲或視頻,音頻程序時,肯定需要完成一些復雜的數學運算,這些復雜的操作基本都是放在底層的庫中運行的,而且不是通過java語言寫出來的,因為java是基於虛擬機的,比C直接面向CPU的執行效率要低很多。所以在Android架構中,底層代碼是以c語言,庫的形式來完成,例如下圖中第3層的各種庫。

還有跨平台程序的移植,也是需要用到NDK的技術。如果一款游戲曾經在PC上運行成功,現在要移植到Android等操作系統上,如果用Java代碼全部重寫一遍,代價是相當大的,並且後期維護的工作量也非常大,有多少平台就要維護多少個版本,可想而知這是效率非常低的。如果我們把該游戲核心的部分,如游戲引擎,視頻,音頻,圖像處理等統一用C語言來編碼完成,然後只用Java語言來寫一個上層的調用界面,那麼工作量和後期可維護性要簡單很多。
當然如果編寫一個比較簡單的應用,只通過Applications,Application Framework 2層就可以完成的程序,那麼並不需要使用NDK。

Android NDK優缺點有哪些?
優點:
1.運行效率高
2.利於充分發揮軟硬體優勢
3.利於代碼復用
4.降低版本控製成本
5.降低開發成本

缺點:
1.開發難度較高
2.調試難度較高(以庫的形式存在)
3.增加開發團隊規模
來自於: http://blog.csdn.net/huahuadashen/article/details/21520995

❸ 如何在Android studio下調試ndk

android studio ndk調用過程如下:

通過jniaes案例說明調用NDK層配置過程

而我們通過底層來判斷簽名是否正確,如果正確則繼續執行核心代碼,否則退出程序,這樣就可以防止別人惡意反編譯,並進行二次打包。

首先去官網下載一個最新的NDK,隨便放到哪都行,像我放在D:DevAndroidandroid-ndk-r10d.

(1) 新建一個項目:名稱JniAes

首先在java類中添加native介面,注意寫好native介面和System.loadLibrary()即可。代碼如下:

1 public synchronized static native String getFromNativeIv();2 public synchronized static native String getStringFromNative();3 public synchronized static native int jniCheckAPP(Context context);4

然後build project得到其中中間文件,我們關注的是.class文件。編譯OK以後生成的class文件在AS工程的如下目錄:

aesapp

(2)接下來跟class文件生成相應的.h頭文件,執行如下命令即可

點擊"View->Tool Windows->Terminal" 即在Studio中進行終端命令行工具.執行如下命令生成c語言頭文件.javah -d jni -classpath c:-16android.jar;....uildintermediatesclassesdebug com.aes.jniaes.MainActivity

(3)然後將剛才的 .h文件剪切過來。在jni目錄下新建一個c文件,隨意取名,我的叫strk.c 。

strk.c文件,用於實現核心代碼邏輯,判斷包名.哈希值是否合法,如果返回1,為合法。反之,則不合法。入口方法為:jint Java_com_aes_jniaes_MainActivity_jniCheckAPP(JNIEnv* env, jobject context, jobject thiz)

接下來在工程的local.properties文件中添加NDK路徑(上面下載好的那個NDK),類似其中的SDK路徑一樣,我的添加後如下:

sdk.dir=D:\Dev\Android\android-sdk-windowsndk.dir=D:\Dev\Android\android-ndk-r10d

(4)接下來在app mole目錄下的build.gradle中設置庫文件名(生成的so文件名)。找到gradle文件的defaultConfig這項,在裡面添加如下內容:


defaultConfig { applicationId "com.aes.jniaes" minSdkVersion 15 targetSdkVersion 22 versionCode 1 versionName "1.0" ndk { moleName "checkapp-jni" //生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86" //輸出指定三種abi體系結構下的so庫。目前可有可無。 } }


(5)最後就是添加靜態初始化loadLibrary代碼,添加如下:

static { System.loadLibrary("checkapp-jni"); //so文件的名字 }

編譯出來的so文件在aesappuildintermediates dkdebuglib目錄下

那麼如何將編譯好的so文件進行使用,可以通過如下方式:

二 .引用so文件

(1).在「src/main」目錄中新建名為「jniLibs」的目錄;

(2).將so文件復制、粘貼到「jniLibs」目錄內。

❹ 如何改變ndk android

工具/原料

win8 x64
android-ndk-r10d-windows-x86_64.exe
com.android.ide.eclipse.ndk_23.0.2.1259578.jar
ubuntukylin-14.04-desktop-amd64
android-ndk-r10c-linux-x86_64.bin
前期准備

1

環境搭建的問題,建議大家最好看視頻,雖然理論上android環境搭建很簡單,但是存在了太多的陷阱,由於陷阱太多,細節太多帖子難免有些會漏掉一些類容,所以建議看視頻,視頻講解的更全面一下謝謝!
2
android sdk環境搭建:
3
下載android ndk,
4
下eclipse支持ndk插件,
Windows下搭建

將下載下來的「android-ndk-r10c-windows-x86_64.exe」放到
「D:\Android「目錄下面,然後雙擊安裝,便會自動解壓到"D:\Android"
下面
將中「comandroid.ide.eclipse.ndk_23.0.2.1259578.jar」下載到"D:\Android\adt-bundle-windows-x86_64-20140702\eclipse\plugins\com.android.ide.eclipse.ndk_23.0.2.1259578.jar"

① 啟動"D:\Android\adt-bundle-windows-x86_64-20140702\eclipse\eclipse.exe"
② 選擇菜單欄上的[Window->Perferences->Android->NDK]設置 NDK Loaction 為D:\Android\android-ndk-r10d;

添加環境變數 NDK_ROOT 為: D:\Android\android-ndk-r10d
在環境變數 PATH 下追加 :%NDK_ROOT%;

5
如果是在Windows上做開發的話,建議使用VisualGDB插件,方便進行調試,具體的話可以看「VisualGDB 環境搭建」

❺ 如何在Ubuntu下搭建Android NDK開發環境

在Ubuntu 系統下搭建Android NDK 開發環境分以下步驟:

  1. 到官網下載NDK版本。

  2. 解壓到 ~/bin 目錄下。

  3. 配置NDK環境變數,打開 ~/.bashrc文件: $sudovim~/.bashrc 在文件最後一行添加一行如下指令:exportPATH=$PATH:~/bin/android-ndk-r7b

  4. 保存關閉bashrc 文件,並運行ndk-build-v 查看NDK版本信息。

  5. 如果出現NDK版本信息,就表示NDK安裝成功了。

❻ Android NDK到底能做哪些有趣的事情

NDK全稱Native Development Kit,因而NDK本身主要是一套工具鏈。NDK裡麵包含了交叉編譯、鏈接、調試等的工具,以及一些比較基本的函數庫,如STL、標准C庫等,一些圖形的glue介面等,還有JNI的一些機制。

感覺題主所稱的NDK在實際的NDK之外,似乎還包含JNI機制和C/C++編程語言。
JNI是一種讓Java層代碼和C/C++層代碼可以相互調用的機制,也就是Java層代碼可以調用C/C++,反過來也可以。不僅僅是Android開發可以用JNI這種機制,普通的PC機上的JAVA開發也可以用這種機制。
在Android app開發中使用C/C++語言,如同其他朋友所言,能帶來的好處很多,如利用遺留的相關庫,訪問底層操作系統介面等等。C/C++是這種開發中的核心。
至於說到有沒有必要,當然是具體看情況了。如果Android的Java層開發的知識的積累還非常少,當然應該先積累這方面的東西。對於許多對性能要求比較苛刻的應用領域,如其他朋友提到的音視頻編解碼,還有游戲的圖形什麼的使用NDK寫一些C/C++代碼可能比較好。要看別人優秀的使用了JNI機制和C/C++的開源項目,學一下一定是很有幫助的。
學習方法嘛,主要是分成NDK工具、JNI和 C/C++編程語言3個部分來看。
C/C++編程語言,自不必多說,和常規的 C/C++編程語言又沒有什麼特別的地方,主要的差別可能也就在可用的函數庫等方面了。
JNI的話,有一份叫 《The Java Native Interface Programmer's Guide and Specification》的文檔非常好,比較清楚的講解了Java代碼如何與C/C++代碼相互訪問的方法。
至於NDK,可以參考NDK自帶的文檔,或者android aosp項目中來了解如何編寫Android.mk。 參考NDK自帶的文檔來了解如何編譯,鏈接,調試,如何編寫Application.mk,如何使用STL等。還可以搜一下如何把NDK集成進自己使用的IDE中,如Eclipse,Android Studio等等。

❼ 如何設置NDK的編譯選項

1. 概述
首先回顧一下 Android NDK 開發中,Android.mk 和 Application.mk 各自的職責。
Android.mk,負責配置如下內容:
(1) 模塊名(LOCAL_MODULE)
(2) 需要編譯的源文件(LOCAL_SRC_FILES)
(3) 依賴的第三方庫(LOCAL_STATIC_LIBRARIES,LOCAL_SHARED_LIBRARIES)
(4) 編譯/鏈接選項(LOCAL_LDLIBS、LOCAL_CFLAGS)
Application.mk,負責配置如下內容:
(1) 目標平台的ABI類型(默認值:armeabi)(APP_ABI)
(2) Toolchains(默認值:GCC 4.8)
(3) C++標准庫類型(默認值:system)(APP_STL)
(4) release/debug模式(默認值:release)
由此我們可以看到,本文所涉及的編譯選項在Android.mk和Application.mk中均有出現,下面我們將一個個詳細介紹。
2. APP_ABI
ABI全稱是:Application binary interface,即:應用程序二進制介面,它定義了一套規則,允許編譯好的二進制目標代碼在所有兼容該ABI的操作系統和硬體平台中無需改動就能運行。(具體的定義請參考 網路 或者 維基網路 )
由上述定義可以判斷,ABI定義了規則,而具體的實現則是由編譯器、CPU、操作系統共同來完成的。不同的CPU晶元(如:ARM、Intel x86、MIPS)支持不同的ABI架構,常見的ABI類型包括:armeabi,armeabi-v7a,x86,x86_64,mips,mips64,arm64-v8a等。
這就是為什麼我們編譯出來的可以運行於Windows的二進製程序不能運行於Mac OS/Linux/Android平台了,因為CPU晶元和操作系統均不相同,支持的ABI類型也不一樣,因此無法識別對方的二進製程序。
而我們所說的「交叉編譯」的核心原理也跟這些密切相關,交叉編譯,就是使用交叉編譯工具,在一個平台上編譯生成另一個平台上的二進制可執行程序,為什麼可以做到?因為交叉編譯工具實現了另一個平台所定義的ABI規則。我們在Windows/Linux平台使用Android NDK交叉編譯工具來編譯出Android平台的庫也是這個道理。
這里給出最新 Android NDK 所支持的ABI類型及區別:

那麼,如何指定ABI類型呢?在 Application.mk 文件中添加一行即可:
APP_ABI := armeabi-v7a //只編譯armeabi-v7a版本

APP_ABI := armeabi armeabi-v7a //同時編譯armeabi,armeabi-v7a版本

APP_ABI := all //編譯所有版本
3. LOCAL_LDLIBS
Android NDK 除了提供了Bionic libc庫,還提供了一些其他的庫,可以在 Android.mk 文件中通過如下方式添加依賴:
LOCAL_LDLIBS := -lfoo
其中,如下幾個庫在 Android NDK 編譯時就默認鏈接了,不需要額外添加在 LOCAL_LDLIBS 中:
(1) Bionic libc庫
(2) pthread庫(-lpthread)
(3) math(-lmath)
(4) C++ support library (-lstdc++)
下面我列了一個表,給出了可以添加到「LOCAL_LDLIBS」中的不同版本的Android NDK所支持的庫:

下面是我總結的一些常用的CFLAGS編譯選項:
(1)通用的編譯選項
-O2 編譯優化選項,一般選擇O2,兼顧了優化程度與目標大小
-Wall 打開所有編譯過程中的Warning
-fPIC 編譯位置無關的代碼,一般用於編譯動態庫
-shared 編譯動態庫
-fopenmp 打開多核並行計算,
-Idir 配置頭文件搜索路徑,如果有多個-I選項,則路徑的搜索先後順序是從左到右的,即在前面的路徑會被選搜索
-nostdinc 該選項指示不要標准路徑下的搜索頭文件,而只搜索-I選項指定的路徑和當前路徑。
--sysroot=dir 用dir作為頭文件和庫文件的邏輯根目錄,例如,正常情況下,如果編譯器在/usr/include搜索頭文件,在/usr/lib下搜索庫文件,它將用dir/usr/include和dir/usr/lib替代原來的相應路徑。
-llibrary 查找名為library的庫進行鏈接
-Ldir 增加-l選項指定的庫文件的搜索路徑,即編譯器會到dir路徑下搜索-l指定的庫文件。
-nostdlib 該選項指示鏈接的時候不要使用標准路徑下的庫文件
(2) ARM平台相關的編譯選項
-marm -mthumb 二選一,指定編譯thumb指令集還是arm指令集
-march=name 指定特定的ARM架構,常用的包括:-march=armv6, -march=armv7-a
-mfpu=name 給出目標平台的浮點運算處理器類型,常用的包括:-mfpu=neon,-mfpu=vfpv3-d16
-mfloat-abi=name 給出目標平台的浮點預算ABI,支持的參數包括:「soft」, 「softfp」 and 「hard」

❽ 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 項目在添加jni後,調試很慢

一、前提條件

1、Android studio版本最好2.0以上,在1.5上試過各種問題

2、Ndk版本最好是android-ndk-r10d,ndk的路徑要在項目根目錄下的local.properties下指定,例如ndk.dir=F:\android-ndk-r10d

二、加入gradle-experimental插件

1、打開項目根目錄下的build.gradle文件,加入

classpath "com.android.tools.build:gradle-experimental:0.7.0"

如下圖:

2、默認使用的是com.android.application這個插件,如果要進行jni調試最好換掉這個插件,也就是使用之前加入的gradle-experimental插件,據說不換好像也行,但是沒試過。下面貼出具體的配置:

[java]view plain

  • applyplugin:'com.android.model.application'

  • model{

  • android{

  • compileSdkVersion24

  • buildToolsVersion"24.0.2"

  • defaultConfig.with{

  • minSdkVersion.apiLevel=15

  • targetSdkVersion.apiLevel=24

  • applicationId"com.exampl.myapplication"

  • }

  • }

  • android.buildTypes{

  • release{

  • minifyEnabled=false

  • proguardFiles.add(file('proguard-rules.pro'))

  • }

  • }

  • android.ndk{

  • moleName="hello-jni"

  • ldLibs.addAll(["android","log"])

  • stl="gnustl_shared"

  • /*

  • *

  • *cppFlags.add("-fno-rtti")

  • *cppFlags.add("-fno-exceptions")

  • *ldLibs.addAll(["android","log"])

  • *stl="system"

  • */

  • }

  • android.proctFlavors{

  • create("arm"){

  • ndk.abiFilters.add("armeabi")

  • }

  • create("arm7"){

  • ndk.abiFilters.add("armeabi-v7a")

  • }

  • create("arm8"){

  • ndk.abiFilters.add("arm64-v8a")

  • }

  • create("x86"){

  • ndk.abiFilters.add("x86")

  • }

  • create("x86-64"){

  • ndk.abiFilters.add("x86_64")

  • }

  • create("mips"){

  • ndk.abiFilters.add("mips")

  • }

  • create("mips-64"){

  • ndk.abiFilters.add("mips64")

  • }

  • //Toincludeallcpuarchitectures,leavesabiFiltersempty

  • create("all")

  • }

  • }

  • dependencies{

  • compilefileTree(dir:'libs',include:['*.jar'])

  • testCompile'junit:junit:4.12'

  • compile'com.android.support:appcompat-v7:24.1.1'

  • compile'com.android.support:design:24.1.1'

  • }

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:432
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:743
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:146
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:233
java駝峰 發布:2025-02-02 09:13:26 瀏覽:651
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:532
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726