Ⅰ android-ndk-r9d 32位系統能用么嗎
android-ndk-r9d 32位系統可以用。
cpu的位是指一次性可處理的數據量是多少,1位元組=8位,32位處理器可以一次性處理4個位元組的數據量,依次類推。32位操作系統針對的32位的CPU設計。64位操作系統針對的64位的CPU設計。操作系統只是硬體和應用軟體中間的一個平台。CPU從原來的8位,16位,到現在的32位和64位。
Ⅱ 如何在 Mac 下搭建 Android 編譯環境 for quick v3
### 安裝最新的 Android ADT bundle 和 Android NDK
下載 Android 所需
1. adt-bundle-mac-x86_64_20140321.zip
2. android-ndk-r9d-darwin-x86_64.tar.bz2
3. android-8.zip
* 將 adt-bundle-mac-x86_64-2013???? 目錄改名為 android
* 將 android/sdk 目錄改名為 android/android-sdk-macos
* 將 android-*.zip 解壓到 android/android-sdk-macos/platforms/
* 移動目錄 android-ndk-r? 到 android/android-ndk-r?
最終的目錄結構:
```
<PATH_TO>/android/android-ndk-r?
<PATH_TO>/android/android-sdk-macosx
<PATH_TO>/android/android-sdk-macosx/platforms/android-?
<PATH_TO>/android/eclipse
```
運行 android/android-sdk-macosx/tools/android, 可以看到 Android 2.2 已經安裝好.
### 設置環境變數
~/.bash_profile 中添加以下代碼:
```
ANDROID=/Users/mac/Documents/SDK/android
export ANDROID_NDK_ROOT=${ANDROID}/android-ndk-r9d
export ANDROID_SDK_ROOT=${ANDROID}/android-sdk-macosx
export ANDROID_HOME=${ANDROID_SDK_ROOT}
```
完畢 ~
Ⅲ 如何安裝和設置Cocos Code IDE
基本需求:
安裝JDK。Windows用戶需要選擇正確的版本,比如,你如果下載的IDE是64位版本,那麼你的JDK也需要是64位的版本。
Windows用戶安裝python
2.7。Mac OS X已經集成了python 2.7,所以可以跳過這一步。
請下載Cocos2d-x
3.2來開發Cocos2d-x Lua游戲。
請下載Cocos2d-JS
3.0-RC2來開發Cocos2d-x javaScript游戲。
注意:
Cocos Code IDE是在Cocos2d-x 3.x/Cocos2d-JS 3.x的基礎上開發的,因此,老版本的引擎(Cocos2d-x
2.x)不能在IDE上正常使用。當前版本(1.0.0-RC1)適配了最新的引擎版本(Cocos2d-x
3.2和Cocos2d-JS 3.0 RC2)並且能夠向前兼容舊的3.x版本,為了更好的使用IDE,請下載兼容的引擎版本。
引擎和所創建的工程所在的路徑都不能包含非英文字元,即路徑中不能包含中文。
附加需求:
在iOS的模擬器上調試
確定iOS模擬器已經安裝。
通過USB線來調試Android設備
確定Android
SDK已經安裝。
如果你想進行定製,你需要下面的工具:
Mac OS X/iOS: XCode 5.0 or above
Windows: VS2012
Android: Android SDK, NDK r9d
version, ANT
通過Code IDE來開發已經存在的游戲
如果你的游戲使用Cocos2d-x 3.x或者Cocos2d-JS 3.x,你可以很輕易的使用Code IDE。你只需要:
通過 IDE 創建一個對應的 Cocos Lua/JavaScript 示例工程
用項目資源(腳本、圖片等)替換掉示例工程中的資源
Ⅳ 怎樣解壓android-ndk-r9d-linux-x86
滑鼠右擊解壓
Ⅳ window7 中安裝安卓的NDK 最後配置完有這個問題,怎麼解決 啊 NDK path cannot contain space!
意思是NDK的路徑不能有空格。你把NDK文件夾的路徑上的文件夾名全改成沒空格的就行了。
P.S 這也太麻煩了,也許後續版本中會有改善吧!
Ⅵ 如何定位Android NDK開發中遇到的錯誤
NDK編譯生成的.so文件作為程序的一部分,在運行發生異常時同樣會造成程序崩潰。不同於Java代碼異常造成的程序崩潰,在NDK的異常發生時,程序在Android設備上都會立即退出,即通常所說的閃退,而不會彈出「程序xxx無響應,是否立即關閉」之類的提示框。
NDK是使用C/C++來進行開發的,熟悉C/C++的程序員都知道,指針和內存管理是最重要也是最容易出問題的地方,稍有不慎就會遇到諸如內存無效訪問、無效對象、內存泄露、堆棧溢出等常見的問題,最後都是同一個結果:程序崩潰。例如我們常說的空指針錯誤,就是當一個內存指針被置為空(NULL)之後再次對其進行訪問;另外一個經常出現的錯誤是,在程序的某個位置釋放了某個內存空間,而後在程序的其他位置試圖訪問該內存地址,這就會產生一個無效地址錯誤。常見的錯誤類型如下:
初始化錯誤
訪問錯誤
數組索引訪問越界
指針對象訪問越界
訪問空指針對象
訪問無效指針對象
迭代器訪問越界
內存泄露
參數錯誤
堆棧溢出
類型轉換錯誤
數字除0錯誤
利用Android NDK開發本地應用的時候,幾乎所有的程序員都遇到過程序崩潰的問題,但它的崩潰會在logcat中列印一堆看起來類似天書的堆棧信息,讓人舉足無措。單靠添加一行行的列印信息來定位錯誤代碼做在的行數,無疑是一件令人崩潰的事情。在網上搜索「Android NDK崩潰」,可以搜索到很多文章來介紹如何通過Android提供的工具來查找和定位NDK的錯誤,但大都晦澀難懂。下面以一個實際的例子來說明,首先生成一個錯誤,然後演示如何通過兩種不同的方法,來定位錯誤的函數名和代碼行。
首先,看我們在hello-jni程序的代碼中做了什麼(有關如何創建或導入工程,此處略),看下圖:在JNI_OnLoad()的函數中,即so載入時,調用willCrash()函數,而在willCrash()函數中,std::string的這種賦值方法會產生一個空指針錯誤。這樣,在hello-jni程序載入時就會閃退。我們記一下這兩個行數:在61行調用了willCrash()函數;在69行發生了崩潰。
下面來看看發生崩潰(閃退)時系統列印的logcat日誌:
[plain] view plain
************************************************
Buildfingerprint:'vivo/bbk89_cmcc_jb2/bbk89_cmcc_jb2:4.2.1/JOP40D/1372668680:user/test-keys'
pid:32607,tid:32607,name:xample.hellojni>>>com.example.hellojni<<<
signal11(SIGSEGV),code1(SEGV_MAPERR),faultaddr00000000
backtrace:
#00pc00023438/system/lib/libc.so
#01pc00004de8/data/app-lib/com.example.hellojni-2/libhello-jni.so
#02pc000056c8/data/app-lib/com.example.hellojni-2/libhello-jni.so
#03pc00004fb4/data/app-lib/com.example.hellojni-2/libhello-jni.so
#04pc00004f58/data/app-lib/com.example.hellojni-2/libhello-jni.so
#05pc000505b9/system/lib/libdvm.so
#06pc00068005/system/lib/libdvm.so
#07pc000278a0/system/lib/libdvm.so
#08pc0002b7fc/system/lib/libdvm.so
#09pc00060fe1/system/lib/libdvm.so
#10pc0006100b/system/lib/libdvm.so
#11pc0006c6eb/system/lib/libdvm.so
#12pc00067a1f/system/lib/libdvm.so
#13pc000278a0/system/lib/libdvm.so
#14pc0002b7fc/system/lib/libdvm.so
#15pc00061307/system/lib/libdvm.so
#16pc0006912d/system/lib/libdvm.so
#17pc000278a0/system/lib/libdvm.so
#18pc0002b7fc/system/lib/libdvm.so
#19pc00060fe1/system/lib/libdvm.so
#20pc00049ff9/system/lib/libdvm.so
#21pc0004d419/system/lib/libandroid_runtime.so
#22pc0004e1bd/system/lib/libandroid_runtime.so
#23pc00001d37/system/bin/app_process
#24pc0001bd98/system/lib/libc.so
#25pc00001904/system/bin/app_process
stack:
beb12340012153f8
beb1234400054290
beb1234800000035
beb1234cbeb123c0[stack]
……
如果你看過logcat列印的NDK錯誤時的日誌就會知道,我省略了後面很多的內容,很多人看到這么多密密麻麻的日誌就已經頭暈腦脹了,即使是很多資深的Android開發者,在面對NDK日誌時也大都默默的選擇了無視。
「符號化」NDK錯誤信息的方法
其實,只要你細心的查看,再配合Google提供的工具,完全可以快速的准確定位出錯的代碼位置,這個工作我們稱之為「符號化」。需要注意的是,如果要對NDK錯誤進行符號化的工作,需要保留編譯過程中產生的包含符號表的so文件,這些文件一般保存在$PROJECT_PATH/obj/local/目錄下。
第一種方法:ndk-stack
這個命令行工具包含在NDK工具的安裝目錄,和ndk-build和其他一些常用的NDK命令放在一起,比如在我的電腦上,其位置是/android-ndk-r9d/ndk-stack。根據Google官方文檔,NDK從r6版本開始提供ndk-stack命令,如果你用的之前的版本,建議還是盡快升級至最新的版本。使用ndk –stack命令也有兩種方式
使用ndk-stack實時分析日誌
在運行程序的同時,使用adb獲取logcat日誌,並通過管道符輸出給ndk-stack,同時需要指定包含符號表的so文件位置;如果你的程序包含了多種CPU架構,在這里需求根據錯誤發生時的手機CPU類型,選擇不同的CPU架構目錄,如:
[plain] view plain
adbshelllogcat|ndk-stack-sym$PROJECT_PATH/obj/local/armeabi
當崩潰發生時,會得到如下的信息:
[plain] view plain
**********Crashmp:**********
Buildfingerprint:'vivo/bbk89_cmcc_jb2/bbk89_cmcc_jb2:4.2.1/JOP40D/1372668680:user/test-keys'
pid:32607,tid:32607,name:xample.hellojni>>>com.example.hellojni<<<
signal11(SIGSEGV),code1(SEGV_MAPERR),faultaddr00000000
Stackframe#00pc00023438/system/lib/libc.so(strlen+72)
Stackframe#01pc00004de8/data/app-lib/com.example.hellojni-2/libhello-jni.so(std::char_traits<char>::length(charconst*)+20):Routinestd::char_traits<char>::length(charconst*)at/android-ndk-r9d/sources/cxx-stl/stlport/stlport/stl/char_traits.h:229
Stackframe#02pc000056c8/data/app-lib/com.example.hellojni-2/libhello-jni.so(std::basic_string<char,std::char_traits<char>,std::allocator<char>>::basic_string(charconst*,std::allocator<char>const&)+44):Routinebasic_stringat/android-ndk-r9d/sources/cxx-stl/stlport/stlport/stl/_string.c:639
Stackframe#03pc00004fb4/data/app-lib/com.example.hellojni-2/libhello-jni.so(willCrash()+68):RoutinewillCrash()at/home/testin/hello-jni/jni/hello-jni.cpp:69
Stackframe#04pc00004f58/data/app-lib/com.example.hellojni-2/libhello-jni.so(JNI_OnLoad+20):RoutineJNI_OnLoadat/home/testin/hello-jni/jni/hello-jni.cpp:61
Stackframe#05pc000505b9/system/lib/libdvm.so(dvmLoadNativeCode(charconst*,Object*,char**)+516)
Stackframe#06pc00068005/system/lib/libdvm.so
Stackframe#07pc000278a0/system/lib/libdvm.so
Stackframe#08pc0002b7fc/system/lib/libdvm.so(dvmInterpret(Thread*,Methodconst*,JValue*)+180)
Stackframe#09pc00060fe1/system/lib/libdvm.so(dvmCallMethodV(Thread*,Methodconst*,Object*,bool,JValue*,std::__va_list)+272)
……(後面略)
我們重點看一下#03和#04,這兩行都是在我們自己生成的libhello-jni.so中的報錯信息,那麼會發現如下關鍵信息:
[plain] view plain
#03(willCrash()+68):RoutinewillCrash()at/home/testin/hello-jni/jni/hello-jni.cpp:69
#04(JNI_OnLoad+20):RoutineJNI_OnLoadat/home/testin/hello-jni/jni/hello-jni.cpp:61
回想一下我們的代碼,在JNI_OnLoad()函數中(第61行),我們調用了willCrash()函數;在willCrash()函數中(第69行),我們製造了一個錯誤。這些信息都被准確無誤的提取了出來!是不是非常簡單?
先獲取日誌,再使用ndk-stack分析
這種方法其實和上面的方法沒有什麼大的區別,僅僅是logcat日誌獲取的方式不同。可以在程序運行的過程中將logcat日誌保存到一個文件,甚至可以在崩潰發生時,快速的將logcat日誌保存起來,然後再進行分析,比上面的方法稍微靈活一點,而且日誌可以留待以後繼續分析。
[plain] view plain
adbshelllogcat>1.log
ndk-stack-sym$PROJECT_PATH/obj/local/armeabi–mp1.log
第二種方法:使用addr2line和objmp命令
這個方法適用於那些,不滿足於上述ndk-stack的簡單用法,而喜歡刨根問底的程序員們,這兩個方法可以揭示ndk-stack命令的工作原理是什麼,盡管用起來稍微麻煩一點,但是可以滿足一下程序員的好奇心。
先簡單說一下這兩個命令,在絕大部分的linux發行版本中都能找到他們,如果你的操作系統是linux,而你測試手機使用的是Intel x86系列,那麼你使用系統中自帶的命令就可以了。然而,如果僅僅是這樣,那麼絕大多數人要絕望了,因為恰恰大部分開發者使用的是Windows,而手機很有可能是armeabi系列。
別急,在NDK中自帶了適用於各個操作系統和CPU架構的工具鏈,其中就包含了這兩個命令,只不過名字稍有變化,你可以在NDK目錄的toolchains目錄下找到他們。以我的Mac電腦為例,如果我要找的是適用於armeabi架構的工具,那麼他們分別為arm-linux-androideabi-addr2line和arm-linux-androideabi-objmp;位置在下面目錄中,後續介紹中將省略此位置:
[plain] view plain
/Developer/android_sdk/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/
假設你的電腦是windows,CPU架構為mips,那麼你要的工具可能包含在這個目錄中:
[plain] view plain
D:android-ndk-r9d oolchainsmipsel-linux-android-4.8prebuiltwindows-x86_64in
Ⅶ eclipse怎麼搭建cocos2dx
前提: 已經安裝了eclipse,可以正常開發 android應用
環境:windows
工具:1.已經集成了adt的eclipse,可以開發android應用。沒有的,可以下載。下載地址:developer.android.com/sdk/index.html 具體的環境搭建請自行網路
該eclipse下載解壓,無需在額外安裝adt插件即可以開發android應用。
2. android ndk
3. cocos2d-x 使用的是穩定版本為v2.2.2 下載地址: cocos2d-x.org/download/version#Cocos2d-x
搭建步驟:(前提已經安裝了eclipse,並且可以成功開發android應用)
1.為eclipse安裝cdt插件。下載cdt壓縮包:eclipse.org/cdt/downloads.php 下載完成後
打開eclipse,一次點擊》help》》 install new softwear》》Add
彈出如下對話框
Name 隨便取個名字:我的叫 cdt,點擊Archive 找到剛下載的cdt壓縮包後,點擊ok 進入下面界面:
勾選第一個,一直next後重啟eclipse即可。
2.配置ndk,用來編譯c++文件。http://developer.android.com/tools/sdk/ndk/index.html
我使用版本為r9。下載後,解壓縮到相應位置,我的位置是 D:\ndk\android-ndk-r9d
然後,打開eclipse》》window》》preference》》android》》ndk 加入ndk的所在路徑
然後點擊ok。
3.下載cocos2d-x包,我下載的是v2.2.2版本。 http://www.cocos2d-x.org/download/version#Cocos2d-x
下載好後,解壓到相應的位置。我的在:D:\cocos2d
4.導入庫文件:打開eclipse》》file》》import》》
出現如下對話框,點開android,點擊existing。。。。
然後點擊下面的next,到下一個對話框,點擊 對話框 上browse後,選擇剛解壓出來的cocos2d文件,導入
cocos2d-x-2.2.2\cocos2dx\platform\android\java
根據自己解壓後的位置,選擇導入即可
導入後,在eclipse裡面可以看見導入的lib庫文件》》 libcocos2dx
5.導入例子程序。 導入項目和4一樣,只是導入的文件不一樣,它的位置是
D:\cocos2d\cocos2d-x-2.2.2\samples\Cpp\SimpleGame D:\cocos2d為我自己創建保存解壓文件的地方
請不要勾選 project,及不要把項目拷到eclipse裡面,會有問題。
如果項目有錯,可能沒有找到相應的庫文件,請一次點擊項目》》右鍵,最下面一項》》android》》右下方點擊add》》彈出框中,選擇上面導入的庫文件 libcocos2dx,點擊ok
6.配置builder。 右鍵點擊剛導入的項目 》》properties(最下面項)》》在出現的對話框中,左邊,點擊Builders》》把右邊 cdt builder 前面的勾去掉,如 下圖
然後,點擊 new》》program》》OK,進入下圖
點擊 location 下面》》Browse file system 按鈕》》 選取剛才ndk安裝的路徑位置 D:\ndk\android-ndk-r9d\ndk-build.cmd (這個是我的位置,請根據自己的放置位置,選擇進去)
點擊 working directory 下面 Browse workplace 》》選擇剛導入的項目
最後如圖:
然後點擊ok完成
7.配置 .mk文件
點擊導入的項目,點擊jni》》 雙擊,打開Application.mk 文件,在裡面添加,如下代碼:
NDK_MODULE_PATH := D:\cocos2d\cocos2d-x-2.2.2\cocos2dx\platform\third_party\android\prebuilt;D:\cocos2d\cocos2d-x-2.2
保存(注意這里是我cocos2d的放置路徑,請填寫你自己的路徑,是2句話,中間用分號隔開的)
我的cocos2d解壓後是放在 d盤的 cocos2d文件夾裡面的
8.加入項目需要的資源
從文件夾——D:\cocos2d\cocos2d-x-2.2.2\samples\Cpp\SimpleGame\Resources\hd
裡面拷貝 裡面的圖片到項目的 assets裡面
Ⅷ 如何解決android NDK開發中的NDK
1,首先,來看看在hello-jni程序的代碼中做了什麼(有關如何創建或導入工程,此處略),下面代碼中:在JNI_OnLoad()的函數中,即so載入時,調用willCrash()函數,而在willCrash()函數中,std::string的這種賦值方法會產生一個空指針錯誤。這樣,在hello-jni程序載入時就會閃退。記一下這兩個行數:在61行調用了willCrash()函數;在69行發生了崩潰2看看發生崩潰(閃退)時系統列印的logcat日誌:、只要細心的查看,再配合Google提供的工具,完全可以快速地准確定位出錯的代碼位置,這個工作我們稱之為「符號化」。需要注意的是,如果要對NDK錯誤進行符號化的工作,需要保留編譯過程中產生的包含符號表的so文件,這些文件一般保存在$PROJECT_PATH/obj/local/目錄下。3方法:ndk-stack這個命令行工具包含在NDK工具的安裝目錄,和ndk-build及其他常用的一些NDK命令放在一起,比如在我的電腦上,其位置是/android-ndk-r9d/ndk-stack。根據Google官方文檔,NDK從r6版本開始提供ndk-stack命令,如果你用的之前的版本,建議還是盡快升級至最新的版本。使用ndk–stack命令也有兩種方式實時分析日誌在運行程序的同時,使用adb獲取logcat日誌,並通過管道符輸出給ndk-stack,同時需要指定包含符號表的so文件位置;如果你的程序包含了多種CPU架構,在這里需求根據錯誤發生時的手機CPU類型,選擇不同的CPU架構目錄,如:當崩潰發生時,會得到如下的信息:重點看一下#03和#04,這兩行都是在我們自己生成的libhello-jni.so中的報錯信息,因此會發現如下關鍵信息:回想一下之前代碼,在JNI_OnLoad()函數中(第61行),調用了willCrash()函數;在willCrash()函數中(第69行),製造了一個錯誤。4先獲取日誌再分析這種方法其實和上面的方法沒有什麼大的區別,僅僅是logcat日誌獲取的方式不同。可以在程序運行的過程中將logcat日誌保存到一個文件,甚至可以在崩潰發生時,快速的將logcat日誌保存起來,然後再進行分析,比上面的方法稍微靈活一點,而且日誌可以留待以後繼續分析。
Ⅸ 用android ndk r9d 中ndk-builder編ffmpeg的有沒有哪位大神提供
1、ndk-builder 寫法有問題,應該是 ndk-build 吧;
2、ndk 編譯的第三方庫或者源碼的問題,可以到 ndk 貼吧去反應,
http://tieba..com/f?kw=ndk
3、希望獲取或者下載ffmpeg源碼的話,可以到
http://sourceforge.net/projects/ffmpeg/?source=directory 去下載;
希望可以對你有用,謝謝