2009-06-16 57 views
264

我試圖開發/移植一個遊戲到Android,但它是在C中,並且Android支持Java,但我確信必須有一種方法來獲得一個C應用程序,任何人都知道一個很好的教程主題?用C或C++編寫Android應用程序?

謝謝!

+0

只有當你越獄電話AFAIK。 – Cogsy 2009-06-16 15:16:56

+58

是不是對iPhone的制動? – 2009-06-16 15:19:10

+1

G1默認情況下不允許root訪問,並且對於可以在「Android」環境之外執行的操作有很多限制。 我不會有太多的希望找到一種方式來執行Android內的本機代碼。 – Cogsy 2009-06-16 15:23:46

回答

7

望着這似乎是可能的:

"the fact is only Java language is supported doesn’t mean that you cannot develop applications in other languages. This have been proved by many developers, hackers and experts in application development for mobile. The guys at Elements Interactive B.V., the company behind Edgelib library, succeeded to run native C++ applications on the Android platform, even that at this time there is still many issues on display and sound … etc. This include the S-Tris2 game and a 3D animation demo of Edgelib."

12

官方位置似乎是因爲這不是你想做的事情。請參閱Android開發人員列表中的this thread。 Google設想在各種不同設備(CPU,顯示器等)上運行Android。因此,啓用開發的最佳方式是使用針對Dalvik VM的(便攜式)託管代碼。出於這個原因,Android SDK不支持C/C++。

,但看看this page

Android includes a set of C/C++ libraries used by various components of the Android system. These capabilities are exposed to developers through the Android application framework.

託管的應用程序框架出現在頂部,這些庫來進行分層。該頁面繼續列出C/C++庫:標準C庫,媒體,3D,SQL Lite和其他。

因此,您只需要一個編譯器鏈,將C/C++編譯到適當的CPU(在G1中爲ARM)。一些關於如何做到這一點的簡要說明是here

我不知道從哪裏可以找到這些庫提供的API的描述。我猜想有可能是頭文件埋在SDK的某處,但文檔可能粗略/缺失。但我認爲這是可以做到的!

希望這是有用的。爲了記錄,我沒有編寫任何原生的android應用程序 - 只是一些簡單的託管應用程序。

Andy

-7

簡答:你不能。

@ Backslash17:通過閱讀文章和安裝說明的以下鏈接,所有公司開始工作的是在模擬器上啓動一個自編譯的可執行文件,繞過了android框架。一旦你有模擬器,你可以telnet進入並擁有一個linux shell。運行一個linux程序當然是微不足道的。 但是,這不適用於沒有越獄(又稱root訪問權限)的手機,並且不能在市場上交付。

除非Google打開其他機會或者有人編寫將語言X編譯爲Dalvik字節碼的自定義編譯器(Dalvik是運行Android程序的VM),否則您將無法編寫本機代碼。

1

有一個計劃,以便在Android的下一個版本的SDK C/C++庫(?代號爲Eclair的)到今天爲止,它不可能通過Android的Java SDK。然而,你可以抓住巨大的開源項目,推出你自己的庫,然後刷你自己的設備......但任何想使用你的庫的人都必須刷新你的自定義構建。

39

Android NDK是一個工具集,可以讓你實現在本地代碼你的應用程序的一部分,使用的語言,如C和C++。對於某些類型的應用程序,這可以幫助您重新使用以這些語言編寫的代碼庫。

有關如何獲得與本地發展開始更多信息,請this link

示例應用程序可以找到here

17

通常情況下,你必須:

  1. 安裝谷歌Android NDK。它 包含庫,頭,makfile 實例和gcc工具
  2. 構建從ARM C代碼 可執行文件,優化,如果需要
  3. 連接與 提供的庫鏈接到一個手機使用提供 亞行接口和測試你的 可執行

如果您正在尋找銷售應用:

  1. 構建溴化鋰從你的C代碼進制
  2. 創建簡單的Java代碼,這將 使用這個庫
  3. 嵌入此庫到應用 包文件
  4. 測試應用
  5. 把它賣掉或分發免費
6

自2009年以來,在這個問題上有一個發展。
Necessitas - 適用於Android的Qt(C++框架)
開始使用video

2

本地C/C++文件Ubuntu中的libstdC++。*是x86(或x86_64)二進制文件,但Android設備和仿真器是ARM​​。當然,即使你設置了正確的soname,這也無濟於事。這是非常天真的方式,無處可逃。 Android對C++的支持非常有限,這意味着沒有例外,標準C++庫(包括STL)和RTTI。如果您需要此類功能,請使用我的定製NDK發行版

http://crystax.net/android/ndk.php - 它支持上面列出的完整C++功能。

爲什麼會出現錯誤:未定義引用'__cxa_end_cleanup'鏈接錯誤。 Android stlport

時間。因爲沒有鏈接到libstdC++。 A.錯了。

因爲它使用了一些靜態庫,所以需要鏈接完整的libstdC++。 A.可以

http://crystax.net/android/ndk.php這裏下載包

來源\ CXX-STL \ GNU-的libstdc + + \ \庫目錄armeabi。

Android對自己的libstdC++支持有限,它必須鏈接到一個完整的libstdc + +。一份工作。

添加文件在Android.mk LOCAL_LDFLAGS = $ (LOCAL_PATH)/libs/libcurl.a \

$ (LOCAL_PATH)/libs/liblua.a \ 
`$ (LOCAL_PATH)/libs/libstdc + +. A` 

而且LOCAL_CPPFLAGS + =-lstdc + +-fexceptions可以編譯

2

我不知道一個教程,但一個好的開發工具:的Airplay SDK從Ideaworks Labs的。(最近更名爲「Marmelade」)使用C/C++,您可以爲Windows Mobile,iPhone,Android構建應用程序。我不喜歡的唯一組件是GUI編輯器 - 一個有問題的組件,但您始終可以用記事本替換它。

8

谷歌已經推出了谷歌I/O 2011:把C和C++遊戲到Android會議是可在http://www.youtube.com/watch?v=5yorhsSPFG4

這是很好的瞭解使用NDK的在C和C++編寫的應用程序機器人。

如果你只是想交叉編譯任何基於控制檯本土遊戲在Android上運行它們,然後this Article已經顯示出相同的3種方法。

1:靜態編譯使用獨立的工具鏈

2:使用Android NDK的工具鏈

3交叉編譯:交叉編譯使用AOSP源代碼

3

您可以下載c4droid然後安裝GCC插件和安裝到您的SD。從shell中我只是遍歷GCC二進制文件所在的目錄,然後調用它來創建一個可執行文件。

查找/ -name GCC

/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androideabi-gcc

貓>測試.C

#include<stdio.h> 
int main(){ 
printf("hello arm!\n"); 
return 0; 
} 

./arm-linux-androideabi-gcc test.c的-o測試

./test

你好!

相關問題