小屋創作

日誌2017-03-05 10:53

Cocos2d-x 編譯安卓APK錯誤紀錄串

作者:Majitoo

編譯成APK時常常會發生各種奇怪問題 可能昨天能編譯 今天就不能編譯的怪問題
特此開個紀錄串,當遇到編譯問題並解決時,會在這串更新


狀況1:
從 E:\cocos2d\android-ndk-r13b-windows-x86_64\android-ndk-r13b\RELEASE.TXT
檔案獲取 NDK 版本失敗。
解決方法:
從他提示的路徑下,創建RELEASE文字檔,內容就寫上你的NDK版本
像是我是用NDK 64位元r13b的版本
在文字檔內添加  r13b (64-bit)   即可。


狀況2:
在開發環境上執行遊戲正常沒有問題
但是在手機上卻出現無回應,遊戲直接閃退。
解決方法:
當然閃退問題有很多種,但是其中一種我最常遇到
假如你的文字素材在fonts/arial.ttf
程式調用資源時打fonts/Arial.ttf
大小寫不一樣,開發環境上執行不會有問題
但在手機上一運行就閃退了....
所以調用資源時,要注意大小寫是否正確。
這問題我一開始遇到時,真的找了半天找不出問題...夠坑爹


狀況3:
在3.12版本以上時,使用Curl庫,在編譯APK時會出現
netrc.c:function Curl_parsenetrc: error: undefined reference to 'getpwuid_r'
解決方法:
編譯安卓版本請選擇API-21以上的,即可解決問題


狀況4:
出現 jni/Android.mk:26: *** commands commence before first target.  Stop.
解決方法:
在專案下\proj.android\jni\Android.mk
第26行有空白字元,原來在我修改時,沒有刪乾淨字元,如下圖。



狀況5:
在編譯API 版本為23時,會出現以下錯誤
-compile:
    [javac] Compiling 28 source files to E:\work3.12\LegendStory\cocos2d\cocos\platform\android\java\bin\classes
    [javac] warning: [options] source value 1.5 is obsolete and will be removed in a future release
    [javac] warning: [options] target value 1.5 is obsolete and will be removed in a future release
    [javac] warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
    [javac] E:\work3.12\LegendStory\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:9: error: package org.apache.http does not exist
    [javac] import org.apache.http.Header;
    [javac]                       ^
    [javac] E:\work3.12\LegendStory\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:10: error: package org.apache.http.message does not exist
    [javac] import org.apache.http.message.BasicHeader;
    [javac]                               ^
    [javac] E:\work3.12\LegendStory\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:47: error: cannot find symbol
    [javac]     public void onFailure(int i, Header[] headers, byte[] errorResponse, Throwable throwable) {
    [javac]                                  ^
    [javac]   symbol:   class Header
    [javac]   location: class DataTaskHandler
    [javac] E:\work3.12\LegendStory\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:57: error: cannot find symbol
    [javac]     public void onSuccess(int i, Header[] headers, byte[] binaryData) {
    [javac]                                  ^
    [javac]   symbol:   class Header
    [javac]   location: class DataTaskHandler
    [javac] E:\work3.12\LegendStory\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:106: error: cannot find symbol
    [javac]     public void onFailure(int i, Header[] headers, Throwable throwable, File file) {
    [javac]                                  ^
    [javac]   symbol:   class Header
    [javac]   location: class FileTaskHandler
    [javac] E:\work3.12\LegendStory\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:116: error: cannot find symbol
    [javac]     public void onSuccess(int i, Header[] headers, File file) {
    [javac]                                  ^
    [javac]   symbol:   class Header
    [javac]   location: class FileTaskHandler
    [javac] E:\work3.12\LegendStory\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:253: error: cannot find symbol
    [javac]                     Header[] headers = null;
    [javac]                     ^
    [javac]   symbol: class Header
    [javac] E:\work3.12\LegendStory\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:257: error: cannot find symbol
    [javac]                         List<Header> list = new ArrayList<Header>();
    [javac]                              ^
    [javac]   symbol: class Header
    [javac] E:\work3.12\LegendStory\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:257: error: cannot find symbol
    [javac]                         List<Header> list = new ArrayList<Header>();
    [javac]                                                           ^
    [javac]   symbol: class Header
    [javac] E:\work3.12\LegendStory\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:258: error: cannot find symbol
    [javac]                         list.add(new BasicHeader("Range", "bytes=" + fileLen + "-"));
    [javac]                                      ^
    [javac]   symbol: class BasicHeader
    [javac] E:\work3.12\LegendStory\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:259: error: cannot find symbol
    [javac]                         headers = list.toArray(new Header[list.size()]);
    [javac]                                                    ^
    [javac]   symbol: class Header
    [javac] E:\work3.12\LegendStory\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:261: error: cannot access HttpEntity
    [javac]                     task.handle = downloader._httpClient.get(Cocos2dxHelper.getActivity(), url, headers, null, task.handler);
    [javac]                                                         ^
    [javac]   class file for org.apache.http.HttpEntity not found
    [javac] Note: Some input files use or override a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] Note: E:\work3.12\LegendStory\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java uses unchecked or unsafe operations.
    [javac] Note: Recompile with -Xlint:unchecked for details.
    [javac] 12 errors
    [javac] 3 warnings

BUILD FAILED
E:\cocos2d-x\android-sdk_r24.4.1-windows\android-sdk-windows\tools\ant\build.xml:597: The following error occurred while executing this line:
E:\cocos2d-x\android-sdk_r24.4.1-windows\android-sdk-windows\tools\ant\build.xml:716: The following error occurred while executing this line:
E:\cocos2d-x\android-sdk_r24.4.1-windows\android-sdk-windows\tools\ant\build.xml:730: Compile failed; see the compiler error output for details.
解決方法:
打開sdk\platforms\android-23\optional資料夾
有個叫做org.apache.http.legacy.jar的檔案
複製起來並貼到遊戲專案下的cocos2d\cocos\platform\android\java\libs裡面
就可以正常編譯android-23 API。

狀況6:
我一如往的寫專題,但是有一天發現模擬器上(BlueStatck、NOX(夜神))
兩個手機模擬器上運行專題APP會直接閃退
而在實際手機上,卻很正常不會閃退。
解決方法:
上網找到別人說的解決方法
到遊戲專案下的proj.android\jni\Application.mk
加上一行APP_PLATFORM := android-10
雖然問題莫名其妙解決了...但還是不知道為什麼會造成這樣的錯誤..

狀況7:
有4台手機分別是A組員 B組員 C組員 和我的手機
在遊戲版本都一樣的狀態下,執行到一個場景中時
A組員和B組員的手機都會遊戲閃退
而C組員和我的手機遊戲並不會閃退
這是非常怪異的情況
於是我下載了兩個手機模擬器 BlueStack和夜神
BlueStack運行那個場景不會閃退,而夜神那個場景卻會閃退
解決方法:
於是我註解程式碼並慢慢找問題才發現,
bool ItemScene::init()
{
    if ( !Layer::init() )
    {
        return false;
    }
   //*
do something
   *//

   //return true;  //忘了回傳return true...
}
原來我根本忘記return true了阿...


有些問題是依靠Google查詢解決的
若有發現新的問題,會繼續在此文章補上。

0

0

LINE 分享

相關創作

小勇者阿瑪 - 放置RPG公測 Android APK iOS | 肯魚

星之翼 - 機甲美少女GVG格鬥遊戲中國公測 Android APK iOS | 肯魚

星魂之上 - 二次元放置策略卡牌遊戲中國公測 Android APK iOS | 肯魚

留言

開啟 APP

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】