① android ndk運行問題,大神速進!!!
開發android我覺得還是SDK+eclipse好用,而且搭建平台也簡單,易學,建議樓主查查,使用看看~~~
② android ndk r8b和r9c有啥區別
1、增加C++11標准
2、增加opengl es 3.0
3、增加了語音文字轉換
4、解決 r8 兩次編譯的問題
等一系列的功能,當然上面的幾個是主要的,
當然現在最新的版本是ndk r10c,
如果要更新的話,建議直接更新到 r10c,
希望對你有用,我是ndk吧吧主,有問題可以ndk吧留言,謝謝!
③ 如何在Vitamio中使用自己編譯的FFmpeg
環境要求
Vitamio 3.0是使用Android NDK r8b版本編譯生成的,所以建議也使用此版本的NDK編譯您改寫過的FFmpeg,根據開發者的反饋,使用其它版本的NDK可能導致很多問題甚至崩潰。
編譯生成FFmpeg
首先,從我們的GitHub網址:http://github.com/yixia/FFmpeg-Android 下載一份FFmpeg-Android庫的拷貝,根據自己的需求對 FFmpeg-Android.sh 進行適當修改。
最常見的場景是編譯FFmpeg中你的程序需要的某幾個特定模塊,其它大部分不需要動。這種情況下,只需要在shell腳本下修改 FFMPEG_FLAGS ,所有可用參數都在FFmpeg的配置腳本里有詳細說明,可通過 configure --help 查閱。
個別情況下,如果需要為FFmpeg打補丁,那可能會麻煩些。我假定你自己已經知道了要怎麼做。簡言之,你只要懂FFmpeg-Android.sh或者編寫自己的編譯/生成腳本即可。
最後,在bash中運行FFmpeg-Android.sh腳本,既然是bash腳本,也許可能在zsh中運行。
打包libarm.so
在VitamioBundle中找到res/raw/libarm.so這個文件:
=> file res/raw/libarm.so
res/raw/libarm.so: 7-zip archive data, version 0.3
如你所見,它是個7-zip壓縮文件,因此可以直接將其解壓到隨便哪裡後,用你自己在前一步生成的libffmpeg.so替換其中原來的每個libffmpeg.so。
60 <=> armv6
61 <=> vfp
70 <=> armv7
71 <=> neon
最後,將替換後的數據照原樣重新打包成libarm.so即可。
④ 新手,cocos2dx移植到android平台不知道怎麼導入sqlite3庫
創建windows平台項目 一、 搭建windows開發環境 官網上顯示cocos2d-x支持win7、winxp、vista系統但我只在win7上用過以下說明均是在win7系統上的編譯器使用vs2010。 1、 安裝vs2010 2、 安裝Visual Assist X可選 3、 執行build-win32.bat編譯cocos2d-x 4、 運行cocos2d-x根目錄下的install-templates-msvc.bat將cocos2d-x模板加入vs模板庫。 5、將.\Debug.win32目錄下的所有dll文件拷貝至Windows\system32\ (iconv.dll libcocos2d.dll libcocosDenshion.dll libcuri.dll libEGL.dll libgles_cm.dll libxml.dll pthreadVCE2.dll zlib1.dll )6、 雙擊cocos2d-win32.vc2010.sln進入vs編譯環境 二、 新建win32項目 1、在「解決方案」上單擊右鍵選擇「添加」-〉「新建項目」。 2、選擇「左側Cocos2d-x模板」在右側列表中選擇「Cocos2d-win32 Application」輸入項目名稱「Cocos2dDemo」點「確定」。3、在彈出的對話框中點擊「下一步」。 4、如果需要使用Box2D引擎則選中否則不要選。點擊「finish」創建成功。 三、 編譯運行 1、右鍵Cocos2dDemo項目選擇「生成」進行編譯。 2、右鍵Cocos2dDemo項目選擇「設為啟動項目」。然後F5或者點擊菜單欄的運行鍵 運行。四、 創建新的解決方案 新建項目有兩種方式一是直接在cocos2d-x解決方案中添加新項目上面已經介紹過了。當你剛開始接觸cocos2d-x還在嘗試寫demo時用這種方式可以快捷的創建demo而且方便查看例子中的代碼。另一種方式是創建一個新的解決方案方法如下 1、「文件」-〉「新建」-〉「項目」 2、進入新建項目的窗口選擇「左側Cocos2d-x模板」在右側列表中選擇「Cocos2d-win32 Application」輸入項目名稱「Cocos2dDemo」點「確定」。然後執行「下一步」。 3、使用Box2D引擎則選中否則不要選。點擊「finish」創建成功。 4、單擊左下角的屬性標簽或者選擇「視圖」-〉「屬性管理器」打開屬性管理器5、在屬性管理器中雙擊「Microsoft.Cpp.Win32.user」彈出屬性頁在裡面設置VC++目錄即可。這樣該設置對所有VC項目都有效見下圖。 6、在「包含目錄」中, 加入下列項目 (D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform\third_party\win32) 7、在「庫目錄」中, 加入下列項目(D:\adroid\cocos2d-2.0x-2.0.3\Debug.win32)(發布時用release目錄下的!!) 8、上面的第4、5、6、7條也可以通過如下方法解決: 定位到%USERPROFILE%\appdata\local\microsoft\msbuild\v4.0可以通過運行或直接在windows資源管理器的地址欄中輸入使用其他文本編輯工具修改Microsoft.Cpp.Win32.user.props或Microsoft.Cpp.X64.user.props文件中的相關欄位。以下是我的文件內容 <IncludePath>D:\android\cocos2d-2.0-x-2.0.3;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\include;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform\win32;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform\third_party\win32\OGLES;D:\android\cocos2d-2.0-x-2.0.3\external\Box2D;D:\android\cocos2d-2.0-x-2.0.3\CocosDenshion\include;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform\third_party\win32;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\kazmath\include;$(IncludePath)</IncludePath><LibraryPath>D:\android\cocos2d-2.0-x-2.0.3\Debug.win32;$(LibraryPath)</LibraryPath> 第4至8條的作用是加入解決方案所依賴的頭文件和庫文件以保證項目的正常編譯運行。 五、 如何刪除vs里的cocos2d-x模板 1、 打開如下目錄 (Example as default install) 1VS2008: C:\Program Files\Microsoft Visual Studio 9.0\VC\vcprojects\ 2VC2008Express: C:\Program Files\Microsoft Visual Studio 9.0\VC\Express\VCProjects 3VS2010: C:\Program Files\Microsoft Visual Studio 10.0\VC\vcprojects\ 4VC2010Express: C:\Program Files\Microsoft Visual Studio 10.0\VC\Express\VCProjects 2、 刪除此目錄下的 Cocos2d-x文件夾 3、 刪除前綴為 CCAppWiz (0.8.0 or later) 或 CCXAppWiz (0.7.2 or earlier)的文件
將項目由win32移植到android平台 一、 快速搭建android開發環境 1、將伺服器上的eclipse、java、android sdk、android ndk、cygwin、cocos2d-x文件夾拷貝到本地請注意保存的路徑為英文、不包含空格、且不要過長。 2、 運行eclipse添加android-sdk的路徑。(preferences->Android:SDK Location) 3、 添加ADT(Help->Install New Software:Work with) 4、添加java環境變數。 新建變數JAVA_HOME變數值為java目錄的絕對路徑。 在path中添加 %JAVA_HOME%\D:\android\Java\jdk1.6.0_20\bin; %JAVA_HOME%\D:\android\Java\jdk1.6.0_20\jre\bin; D:\android\Java\jre6\bin; 5、運行一次Cygwin.bat 6、修改\cygwin\home\用戶名\.bash_profile文件添加NDK_ROOT=/cygdrive/d/android/android-ndk-r8b export NDK_ROOT 7、 修改\cocos2d-2.0-x-2.0.3\create-android-project.bat中的如下路徑 set _CYGBIN=e:\cygwin\bin set _ANDROIDTOOLS=e:\android\android-sdk\tools set _NDKROOT=e:\android\android-ndk-r8 二、 新建android項目 1、 運行create-android-project.bat創建新的android項目例如項目名稱為Cocos2dDemo。 2、 將win32下完成的.cpp和.h文件拷貝到\Cocos2dDemo\Classes 3、將win32下使用的資源拷貝到\Cocos2dDemo\proj.android\assets 4、將cpp文件的路徑、使用的頭文件的目錄加入到Android.mk文件。 5、打開Cygwincd 到/Cocos2dDemo/proj.android目錄下 6、執行./build_native.sh進行編譯 7、在eclipse中編譯打包。 三、 補充 1、2.0以上版本的引擎基本無法在android模擬器上運行建議在xcode和vs上調試好直接在真機上運行。 2、2.0以上版本的引擎要求android的開發和運行環境都要2.2以上的sdk。
將項目由win32移植到ios 一、 創建ios項目 1、 安裝XCode 2、執行install-templates-msvc.bat將模板添加到XCode 3、打開xcode選擇Create a new Xcode project選擇cocos2d-x模版 4、點擊next填入項目名稱Man 5、找到Man的主項目在這里新建一個iOS文件夾。點擊create創建完成 6、刪除Resource和Classes下的多餘文件Helloworld的代碼和資源 7、右鍵點擊Resource 選擇Add Files to "Man"... 7、將Man主項目文件夾下的Resource文件夾中的資源添加到當前工程。注意選擇create folder references for any added folders只是添加一個引用 8、同樣的方法添加源文件和頭文件到Classes下 9、點擊Run編譯運行 二、 補充 1、Mac 平台的OS X需要10.6及以上版本 2、IOS平台需要4.0及以上版本 3、IOS真機支持iPad 1、iPad 2、iPad 3、 iPhone 3GS、iPhone 4、iPhone 4S、iPhone 5、iphone6、iPod Touch 3 and iPod Touch 4 不支持iPhone and iPhone 3G。
⑤ 下面截圖中的java函數表示的是什麼意思,做何種操作
android串口通信以及串口協議解析
一,android串口通信
串口通信採用一個第三方開源項目,實現串口數據收發。
1. 使用了http://code.google.com/p/android-serialport-api/的項目的serialport api和jni;
2. 支持4串口同時收發,有定時自動發送功能,收發模式可選Txt或Hex模式;
3. n,8,1,沒得選;
4. 為減輕界面卡頓的情況,接收區的刷新採用單獨的線程進行定時刷新;
5. 發送區的數據以及一些設置項,在程序關閉時會自動保存,打開時自動載入;
6. jni使用最新的NDKr8b重新編譯了一下
簡單編寫步驟:
1.新建一個項目,自己起個名字
2.直接復制serialport api和jni文件夾到新建的工程,如果不想自己編譯jni,就連libs文件夾也一起復制
3.去android官方網站下載NDK,解壓,在CMD中轉到jni目錄,並執行 絕對路徑\ndk-build
4.自己再封裝一個工具類或直接使用SerialPort類都行,舉個直接使用的例:
直接剽竊原項目的SerialPortActivity.java,並稍微改一下,重點改這里
mSerialPort = mApplication.getSerialPort();
這里可以改成
new SerialPort(new File("/dev/s3c2410_serial0"), 9600, 0);//COM0,波特率9600
5. SerialPortFinder的使用就沒什麼好講的了,實例化後用.getAllDevicesPath()就能獲取到所有設備了。
其它如數據轉換等請參考源碼
源碼可以參考谷歌android-serialport-api例子
http://code.google.com/p/android-serialport-api/source/checkout
svn checkout http://android-serialport-api.googlecode.com/svn/trunk
二,串口通信協議解析
1.通信基本格式
欄位 描述 長度(位元組)
起始符 0F,十六進制碼 1
信息類型 一個位元組,十六進制碼(0F,F0,FF等保留碼不用)1
信息長度 是信息內容的長度,ASCII碼表示(0~9,A~F,最大長度為256)(例如長為11個,十六進制是0B,則兩個位元組就寫0x30 0x42)。
註:因為最大長度256不能滿足有些指令的要求,所以對長度做了擴展,下面是擴展說明:
如果第一個位元組的最高位為1,則表示擴展長度。在擴展長度狀態下,其他15個位元組通過16進制大端模式來保存長度。比如:0x80 0x12表示長度為0x001 2,0x81 0x12表示長度為0x0112。2
信息內容 一組十六進制碼 N
校驗 一個位元組,十六進制碼,是自信息類型起至對象號止所有碼的異或。1
結束符 F0,一個位元組,十六進制碼 (為了保證可靠性,車機下發的結束符為F0 FF)1
2.協議解析
[java] view plain
/**
* 讀取終端設備數據
* @author Administrator
*/
private class ReadThread extends Thread {
@Override
public void run() {
super.run();
// 定義一個包的最大長度
int maxLength = 2048;
byte[] buffer = new byte[maxLength];
// 每次收到實際長度
int available = 0;
// 當前已經收到包的總長度
int currentLength = 0;
// 協議頭長度4個位元組(開始符1,類型1,長度2)
int headerLength = 4;
while (!isInterrupted()) {
try {
available = mInputStream.available();
if (available > 0) {
// 防止超出數組最大長度導致溢出
if (available > maxLength - currentLength) {
available = maxLength - currentLength;
}
mInputStream.read(buffer, currentLength, available);
currentLength += available;
}
}
catch (Exception e) {
e.printStackTrace();
}
int cursor = 0;
// 如果當前收到包大於頭的長度,則解析當前包
while (currentLength >= headerLength) {
// 取到頭部第一個位元組
if (buffer[cursor] != 0x0F) {
--currentLength;
++cursor;
continue;
}
int contentLenght = parseLen(buffer, cursor, headerLength);
// 如果內容包的長度大於最大內容長度或者小於等於0,則說明這個包有問題,丟棄
if (contentLenght <= 0 || contentLenght > maxLength - 5) {
currentLength = 0;
break;
}
// 如果當前獲取到長度小於整個包的長度,則跳出循環等待繼續接收數據
int factPackLen = contentLenght + 5;
if (currentLength < contentLenght + 5) {
break;
}
// 一個完整包即產生
// proceOnePacket(buffer,i,factPackLen);
onDataReceived(buffer, cursor, factPackLen);
currentLength -= factPackLen;
cursor += factPackLen;
}
// 殘留位元組移到緩沖區首
if (currentLength > 0 && cursor > 0) {
System.array(buffer, cursor, buffer, 0, currentLength);
}
}
}
}
/**
* 獲取協議內容長度
* @param header
* @return
*/
public int parseLen(byte buffer[], int index, int headerLength) {
// if (buffer.length - index < headerLength) { return 0; }
byte a = buffer[index + 2];
byte b = buffer[index + 3];
int rlt = 0;
if (((a >> 7) & 0x1) == 0x1) {
rlt = (((a & 0x7f) << 8) | b);
}
else {
char[] tmp = new char[2];
tmp[0] = (char) a;
tmp[1] = (char) b;
String s = new String(tmp, 0, 2);
rlt = Integer.parseInt(s, 16);
}
return rlt;
}
protected void onDataReceived(final byte[] buffer, final int index, final int packlen) {
System.out.println("收到信息");
byte[] buf = new byte[packlen];
System.array(buffer, index, buf, 0, packlen);
ProtocolAnalyze.getInstance(myHandler).analyze(buf);
}
⑥ android調用opencv,環境cdt+ndk-r8b+cygwin。
參考答案: 我們大狼哥要是無聊啊,鼻涕泡都能拿來玩會!
⑦ android配置cocos2d-x環境怎麼安裝CDT
創建Android項目, 項目名稱"CCTest". Youngs-MacBook-Air:~ young40$ cd /opt/cocos2d-2.0-x-2.0.3/ Youngs-MacBook-Air:cocos2d-2.0-x-2.0.3 young40$ ./create-android-project.sh use global definition of NDK_ROOT: /opt/android-ndk-r8b use global definition of ANDROID_SDK_ROOT: /opt/android-sdk-macosx Input package path. For example: org.cocos2dx.example com.young40 Now cocos2d-x supports Android 2.2 or upper version Available Android targets: ---------- id: 1 or "android-3" Name: Android 1.5 Type: Platform API level: 3 Revision: 4 Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P ABIs : armeabi ---------- id: 2 or "android-10" Name: Android 2.3.3 Type: Platform API level: 10 Revision: 2 Skins: HVGA, QVGA, WQVGA400, WQVGA432, WVGA800 (default), WVGA854 ABIs : armeabi ---------- id: 3 or "android-15" Name: Android 4.0.3 Type: Platform API level: 15 Revision: 3 Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800 ABIs : armeabi-v7a, x86 ---------- id: 4 or "android-16" Name: Android 4.1 Type: Platform API level: 16 Revision: 2 Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in ABIs : armeabi-v7a input target id: 2 input your project name: CCTest Created project directory: /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android Created directory /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/src/com/young40 Added file /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/src/com/young40/CCTest.java Created directory /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/res Created directory /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/bin Created directory /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/libs Created directory /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/res/values Added file /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/res/values/strings.xml Created directory /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/res/layout Added file /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/res/layout/main.xml Added file /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/AndroidManifest.xml Added file /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/build.xml Added file /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/proguard-project.txt Resolved location of library project to: /opt/cocos2d-2.0-x-2.0.3/cocos2dx/platform/android/java Updated project.properties Updated local.properties Updated file /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/proguard-project.txt Youngs-MacBook-Air:cocos2d-2.0-x-2.0.3 young40$ 6.編譯默認的C++資源 Youngs-MacBook-Air:proj.android young40$ cd /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/ Youngs-MacBook-Air:proj.android young40$ ./build_native.sh NDK_ROOT = /opt/android-ndk-r8b COCOS2DX_ROOT = /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/../.. APP_ROOT = /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/.. APP_ANDROID_ROOT = /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android Using prebuilt externals make: Entering directory `/opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android' Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver Gdbsetup : libs/armeabi/gdb.setup Compile++ thumb : game_shared <= main.cpp In file included from /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/http://www.cnblogs.com/cocos2dx/platform/android/jni/JniHelper.h:27:0, from jni/hellocpp/main.cpp:2: /opt/android-ndk-r8b/platforms/android-14/arch-arm/usr/include/jni.h:592:13: note: the mangling of 'va_list' has changed in GCC 4.4 Compile++ thumb : game_shared <= AppDelegate.cpp Compile++ thumb : game_shared <= HelloWorldScene.cpp Prebuilt : libgnustl_static.a <= /sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/ Compile++ thumb : cocos2dx_static <= CCConfiguration.cpp .....中間編譯輸出省略 Prebuilt : curl.a <= /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/http://www.cnblogs.com/cocos2dx/platform/third_party/android/prebuilt/libcurl/libs/armeabi/ StaticLibrary : libextension.a SharedLibrary : libgame.so Install : libgame.so => libs/armeabi/libgame.so make: Leaving directory `/opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android'7. 創建Eclipse項目, 並運行默認Demo 如圖, 選擇Android Project from Existing Code. 地址選擇為:/opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android (直接輸入可能會報錯, 請用滑鼠選擇目錄) 點擊下一步就將項目加入了Eclipse中.但是項目會報錯. The import org.cocos2dx.lib cannot be resolved CCTest.java /com.young40.CCTest/src/com/young40 line 26 Java Problem Cocos2dxActivity cannot be resolved to a type CCTest.java /com.young40.CCTest/src/com/young40 line 30 Java Problem Cocos2dxActivity cannot be resolved to a type CCTest.java /com.young40.CCTest/src/com/young40 line 33 Java Problem我的解決辦法是將: /opt/cocos2d-2.0-x-2.0.3/cocos2dx/platform/android/java作為一個項目添加進來, 即可解決報錯問題. 8.編譯運行 我嘗試在Android2.3.3虛擬機運行項目失敗. 沒有關系, 我用真機測試. adb 無線連上真機(cm10真好, 自帶無線調試) Youngs-MacBook-Air:proj.android young40$ /opt/android-sdk-macosx/platform-tools/adb connect 192.168.8.139:5555 connected to 192.168.8.139:5555OK, 運行成功, 如圖. FPS有點低哈, 我的ipad2, 都能全速60幀. 9.創建名稱為CCTest的Xcode項目. 創建後你可以運行測試下. 刪除項目下Classes目錄 然後將目錄/opt/cocos2d-2.0-x-2.0.3/CCTest/Classes添加到項目.請確保Destination是沒有被選中的.這樣代碼將是以引用的方式存在在項目中的. 修改Classes下HelloWorldScene.cpp, 並運行測試. CCLabelTTF* pLabel = CCLabelTTF::create("Hello Cocos2d-x!", "Thonburi", 34);成功.cocos2d-x 2.0.3的版本在ios6上有方向旋轉的問題, 應該為橫屏才對. 10.在Android中重新運行. 首先運行: /opt/cocos2d-2.0-x-2.0.3/CCTest/proj.android/build_native.sh 在Eclipse菜單中選擇Project=>Clean清理下項目, 然後Run下, 可以在手機看到更改也已經生效. 11. 覺得上一步繁瑣? 能不能點擊Run同時也編譯C++資源呢? 答案是可以的. 選中Eclipse左側CCTest項目, 右鍵點擊New=>Other, 在彈出對話框中選擇C/C++=>Convert to a C/C++Proejct(Adds C/C++ Nature) 在接下來一屏中選擇C++ Project以及 Project Type為Makefile project, Toolchains為Other 接下來Eclipse問是否切換到C++視圖, 選擇否. 如果不小心切換過去了, 再切換回java視圖即可. 打開項目屬性頁面, 設置自動編譯C++, 如圖: 注意修改Build command為, 另外需要注意項目名稱. bash ${workspace_loc:/com.young40.CCTest}/build_native.sh NDK_DEBUG=1 V=1 點擊Run,之後我這里報錯, 編譯提示說"please define NDK_ROOT", 需要在項目設置中添加環境變數.如圖 這個時候再點擊Run, 會看到Console窗口會有編譯的輸出, 編譯成功. 運行成功. 12.消除Eclipse中的錯誤提示. 如果打開項目jni目錄下hellocpp/main.cpp文件, 會看到大量的報錯. 我們需要講相關文件添加到項目中. 首先添加/opt/cocos2d-2.0-x-2.0.3/CCTest/Classes到項目中.如圖添加一個Link類型的文件夾. 用同樣方法將"/opt/cocos2d-2.0-x-2.0.3/cocos2dx"添加到項目中. 然後如圖添加引用. /opt/android-ndk-r8b/platforms/android-8/arch-arm/usr/include /opt/cocos2d-2.0-x-2.0.3/CocosDenshion/include 這里和子龍山人翻譯的老外的文章做法略有不同, 他那個方法還是要報很多錯, 可能是版本不同造成的. 我這個方法也不用忽略文件, 用什麼類直接滑鼠點擊可以看到相應聲明. 這樣初步的IOS&Android開發環境就集成好了.
⑧ MuPDF怎麼在windows環境下編譯
git submole update --init代碼獲取完成以後,需要在源代碼目錄生成一個generated目錄,裡面有一些.h文件,這一步非常關鍵,也是我在編譯過程中遇到的最大的障礙根據官方網站的說明,需要用 make generate 命令來生成這個目錄,這就需要安裝cygwin 編譯環境.可直接網上下載安裝,需要特別注意的是在安裝cygwin時必需選擇gcc和make相關的部分,否則無法執行 make命令,對新手來說,這一步非常重要,我就是在這里卡了很長時間,make總是不成功,提示說找不到命令,因為以前沒有相關經驗,所以卡了很長時間。gcc安裝也是非常重要,把 gcc 編譯c代碼和c++ 代碼的部分也都選上,否則即使有了make,也不能make成功。
執行make命令(執行make前,需要將cygwin路徑加入到環境變數):
make generate
make成功以後,在源代碼目錄下面會生成generated 文件夾,內容如下圖:
這一步成功完成後,編譯就成功了一半。下面進行NDK編譯,我用的NDK版本是R8B ,需要說明的是,經過我的摸索,並不是所有的版本的NDK都能編譯通過,如果使用最新的NDKR8D的話會有非常多的警告。在源代碼目錄下找到local.properties.sample,改名為local.properties 做如下修改:
sdk.dir=C:\Documents and Settings\Administrator\android-sdks\platforms\android-10
ndk.dir=C:\android-ndk-r8b
分別是android sdk 路徑和ndk 路徑。這時,先不要執行NDK編譯命令 ,在源代碼目錄的JNI文件夾下找到Application.mk文件,找到下面兩行:
# If the ndk is r8b then workaround bug by uncommenting the following line
#NDK_TOOLCHAIN_VERSION=4.4.3
意思是說如果使用ndk r8b編譯需要取消注釋NDK_TOOLCHAIN_VERSION=4.4.3 這一行,OK,照辦,取消注釋。這一步非常重要,我就是實現沒仔細看這行,導致最後編譯不通過。原因是不同版本的GCC,對命令的解釋有差異,導致錯誤,這里就不深究了。下面正式開始NDK編譯:
整個編譯工作大功告成。
⑨ 使用ndk開發程序需要寫什麼文件
NDK(Native Development Kit)「原生」也就是二進制
AndroidNDK是一套工具,允許Android應用開發者嵌入從C、C++源代碼文件編譯來的本地機器代碼到各自的應用軟體包中,並通過JNI進行訪問。Android從1.5開始支持NDK.
android常用的開發方式是java封裝的庫,而這些庫的底層實現是由C/C++實現,如媒體,圖形庫等
java調用這樣實現就需要用JNI(Java Native Interface)
平時用的也就是google給我們封裝的好的庫,即便是底層實現用的不是Java,但都有統一的Java介面
而NDK的作用是「我們自己寫本地代碼」(C/C++),自己用JNI封裝成Java介面
比如我們想做個計算,二這不是Java的強項,可以用C/C++來寫實現,返回一個運算結果就行了
NDKr5已經實現了不用寫一行Java代碼開發程序了,只不過還是用到了虛擬機,細節被封裝隱藏起來了而已
對於JNI和NDK很多Android開發初學者沒有搞明白這個問題
JNI是Java調用Native機制,是Java語言自己的特性全稱為 Java Native Interface,類似的還有微軟.Net Framework上的p/invoke,可以讓C#或Visual Basic.Net可以調用C/C++的API,所以說JNI和Android沒有關系,在PC上開發Java的應用,如果運行在Windows平台使用 JNI是是經常的,比如說讀寫Windows的注冊表。
NDK是Google公司推出的幫助Android開發者通過C/C++本地語言編寫應用的開發包,包含了C/C++的頭文件、庫文件、說明文檔和示例 代碼,我們可以理解為Windows Platform SDK一樣,是純C/C++編寫的,但是Android並不支持純C/C++編寫的應用,同時NDK提供的庫和函數功能很有限,僅僅處理些演算法效率敏感的 問題,所以Android123推薦初學者學好Java後再學習JNI。
NDK其實多了一個把.so和.apk打包的工具,這個是很重要的。
而JNI開發並沒有打包,只是把.so文件放到文件系統的特定位置。
如果是做應用開發,則需要NDK工具,不然你開發的應用程序怎麼給用戶用呢?難道幫他重新編譯文件系統?
其他至於實現,java調用本地C/C++函數,及其編寫方式,我覺得JNI和NDK沒有什麼區別。
還有一個我個人理解,NDK開發C/C++只能能使用NDK自帶的有限的頭文件,而使用JNI則可以使用文件系統中帶的頭文件,比如utils/Log.h
而後者的資源更多,當然NDK正在努力開發中,以便支持更豐富的介面。
2.開發環境搭建:
NDK開發需要安裝以下物體:
1.cygwin (需要1.7以上版本,下載地址:http://www.cygwin.com官方明確表示MSys or Cygwin 1.5 is notsupported)
在安裝時候,選擇make、gcc、g++、bash、
安裝好後啟動cygwin,運行:
看到如下所11示就ok了 (注意:GNU Make要 3.81以上版本)
3.NDK的使用
(android-ndk-r8b-windows),此文檔只針對r8b版進行說明, ndk可以到官方網http://developer.android.com上進行下載
Ndk下載下來隨意解壓到一個目錄即可(ndk的解壓後存放的路徑必須不能包括空格或中文,比如這種「D:\Program Files\Android-ndk-windows」在cygwin是不能識別成功的。)
如:D:\AndroidDevelop\NDK\android-ndk-r8b
配置NDK 在D:\AndroidDevelop\cygwin\home 目錄下找到.bash_profile打開文件加上:
NDK=/cygdrive/d/AndroidDevelop/NDK/android-ndk-r8b
export NDK
配好後重新打開cygwin
輸入:
cd $NDK
輸入: $NKD/ndk-build 驗證NDK是否可以使用?
在Cygwin下用nano或者vim編輯器編輯你的腳本。對於那些已經存在的腳本用dos2unix轉化一下。因為Windows下的換行是<LF><CR>,Linux下是<LF>,Mac下是<CR>。
先對你的腳本跑一下 dos2unix .bash_profile 就行了。
配置NDK可以參照 http://www.linuxidc.com/Linux/2012-07/65388.htm
⑩ 怎麼給ndk指定gcc版本
給ndk指定gcc版本,在Android.mk裡面修改下面內容:
CC=$(NDK_PATH)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc
CXX=$(NDK_PATH)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++
AS=$(NDK_PATH)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-as
LD=$(NDK_PATH)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-ld
DEPCC=$(NDK_PATH)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc
AR=$(NDK_PATH)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-ar
RANLIB=$(NDK_PATH)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-ranlib