當前位置:首頁 » 編程軟體 » ndk反編譯

ndk反編譯

發布時間: 2022-01-20 20:26:25

① android 4.0 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開發中遇到的錯誤

  • Android NDK開發定義:

AndroidNDK是在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平台的一些列原生系統頭文件和庫。


  • NDK作用:

  1. 代碼的保護,由於apk的java層代碼很容易被反編譯,而C/C++庫反匯難度較大。

  2. 在NDK中調用第三方C/C++庫,因為大部分的開源庫都是用C/C++代碼編寫的。

  3. 便於移植,用C/C++寫的庫可以方便在其他的嵌入式平台上再次使用。


  • NDK的常見的異常類型:

  1. NDK的異常發生時,程序在Android設備上都會立即退出,即通常所說的閃退,而不會彈出程序無響應等字樣。

  2. 指針和內存管理是最重要也是最容易出問題的地方,稍有不慎就會遇到諸如內存無效訪問、無效對象、內存泄露、堆棧溢出等常見的問題。

  3. 在程序的某個位置釋放了某個內存空間,而後在程序的其他位置試圖訪問該內存地址,這就會產生一個無效地址錯誤。


  • 解決方法:

第一種:ndk-stack

這個命令行工具包含在NDK工具的安裝目錄,和ndk-build和其他一些常用的NDK命令放在一起,其位置是/android-ndk-r9d/ndk-stack。

第三種方法:使用Testin崩潰分析服務定位NDK錯誤

通過嵌入SDK,在程序發生崩潰時收集堆棧信息,發送到雲服務平台,從而幫助開發者定位錯誤信息。

  • 以上提到的方法,只適合在開發測試期間,如果應用或者游戲已經發布上線,而用戶經常反饋說崩潰、閃退,這個時候,我們就需要用其他的手段來捕獲崩潰信息。

③ Android-NDK:JNI本地文件中怎麼調試列印輸出到LOGCAT

加入頭文件
#include <android/log.h>
函數__android_log_print(ANDROID_LOG_INFO,LOG_TAG,TITLE)
第一個參數ANDROID_LOG_INFO(還有ANDROID_LOG_ERROR等),表示什麼類型
的輸出,上面的函數相當於android的java代碼的Log.i(LOG_TAG,TITLE),第二個參數就是logcat里的tag,第三個就是列印的內容。具體的請到log.h中自己查看。
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 怎麼防止dex反編譯

防止Android apk被反編譯的方法:
1、判斷apk簽名是否與原版簽名是否一致。
2、代碼混淆,將混淆的級別設置高點,混淆出來以後代碼全部變亂。
3、使用NDK編程,將核心演算法用c/c++來編寫,打包成so庫供java層調用。

⑤ 在哪可以看到NDK下gnu-libstdc++庫的源代碼

概括來說主要分為以下幾種情況: 1. 代碼的保護,由於apk的java層代碼很容易被反編譯,而C/C++庫反匯難度較大。 2. 在NDK中調用第三方C/C++庫,因為大部分的開源庫都是用C/C++代碼編寫的。 3. 便於移植,用C/C++寫的庫可以方便在其他的嵌入式平

⑥ 用jni寫的安卓應用能被反編譯嗎

反編譯是可以的。
但是由於c語言代碼的可讀性本身就很大,反編譯後不可能像java一樣回歸原來的源碼的,反編譯的代碼時沒有數據類型的,所有的數據類型,甚至指針都變成了int類型,c語言的反編譯基本上就可以忽略的功效基本上就可以忽略其功效。

⑦ 簡述如何使用NDK,調用C/C++語言

C++好,對於NDK來說,C++比C語言在與JAVA的回調機制上更加很好的配合,目前來說,大部分比較高級的程序都是利用C++來寫的,既能具備JAVA的方便又能具備C語言的執行效率高,用C++好一些

Android NDK 是在SDK前面又加上了「原生」二字,即Native Development Kit,因此又被Google稱為「NDK」。
眾所周知,Android程序運行在Dalvik虛擬機中,NDK允許用戶使用類似C / C++之類的原生代碼語言執行部分程序。
NDK包括了:
從C / C++生成原生代碼庫所需要的工具和build files。
將一致的原生庫嵌入可以在Android設備上部署的應用程序包文件(application packages files ,即.apk文件)中。
支持所有未來Android平台的一些列原生系統頭文件和庫
為何要用到NDK?
概括來說主要分為以下幾種情況:
1. 代碼的保護,由於apk的java層代碼很容易被反編譯,而C/C++庫反匯難度較大。
2. 在NDK中調用第三方C/C++庫,因為大部分的開源庫都是用C/C++代碼編寫的。
3. 便於移植,用C/C++寫的庫可以方便在其他的嵌入式平台上再次使用。

⑧ 怎樣防止Android apk被反編譯,用什麼加密方法來保護dex源碼文件不被注入惡意代碼杜絕二次打包的出現

防止Android apk被反編譯的方法:

  1. 判斷apk簽名是否與原版簽名是否一致

  2. 代碼混淆,將混淆的級別設置高點,混淆出來以後代碼全部變亂

  3. 使用NDK編程,將核心演算法用c/c++來編寫,打包成so庫供java層調用

⑨ Android中可以用C直接開發嗎不用JAVA,JNI也不行,不想被反編譯

可以的,底層原本就是C的,可以直接跨過JAVA層,但是挺麻煩
可以不用JNI,直接從動態連接庫啟動,但是NDK還是要用的,編譯方便

⑩ 「Android NDK 」是什麼,在什麼情況下使用

1、NDK是一系列工具的集合。

2、NDK提供了一份穩定、功能有限的API頭文件聲明。

3、NDK的發布,使「Java+C」的開發方式終於轉正,成為官方支持的開發方式。

4、NDK將使Android平台支持C開發的開端。

NDK使得在android中,java可以調用C函數庫。我們都知道,java是半解釋型語言,很容易被反匯編後拿到源代碼文件,在開發一些重要協議時,我們為了安全起見,使用C語言來編寫這些重要的部分,來增大系統的安全性。還有,在一些接近硬體環境下,相信大家都清楚C與java的優劣。順帶提一下:NDK並不能顯著提升應用效率。why?我們都覺得C語言比起java來說效率要高出很多,一方面,隨著jdk的不斷更新,java的效率也隨之提高;另一方面,即便使用C語言編碼提高了應用效率,但是在java與C相互調用時平白又增大了開銷。

熱點內容
怎麼設置登錄區域網伺服器憑據 發布:2024-11-16 09:49:46 瀏覽:538
閑置電腦家用下載伺服器 發布:2024-11-16 09:48:28 瀏覽:750
java工程師面試問題 發布:2024-11-16 09:28:36 瀏覽:233
用什麼引擎導出的安卓安裝包不大 發布:2024-11-16 09:09:06 瀏覽:474
安卓手機如何設置轉接 發布:2024-11-16 09:08:55 瀏覽:423
sql行業 發布:2024-11-16 09:04:07 瀏覽:295
如何查看電腦硬碟的介面速率緩存 發布:2024-11-16 08:59:42 瀏覽:221
c語言局部變數與全局變數 發布:2024-11-16 08:37:38 瀏覽:489
安卓蘋果是什麼意思啊 發布:2024-11-16 08:36:03 瀏覽:872
泛型方法編譯 發布:2024-11-16 08:36:01 瀏覽:875