java - cmake教學 - android studio c++



為什麼Android應用程序不能用C/C++編寫,因為你“只是喜歡用C/C++編程”? (5)

Java和Android的一般意圖是,如果不是所有應用程序都用Java編寫大部分內容,並且只有在沒有其他選項時才使用本機內容...因此編寫應用程序的所有內容都適合在Java中執行。

通過Java編寫,您將在本機和Java世界之間架起橋樑,從而避免更多的惡化。

如果你冒險嘗試Java,那麼你也會為自己做一個大忙。 您的Android應用程序不僅會更好,而且您將面臨一種與OO截然不同的方法,您將成為更好的程序員。

除此之外,您還可以通過Java編寫來解決一大堆安全風險。

在我看來,這是一個明智的選擇 - 使用Java。

更新 (為了清晰起見並減少歧義):

我將開始修補Android應用程序。 我計劃使用NDK編寫C ++(因為我有更多的C ++經驗,更喜歡Java),但在Android NDK頁面上遇到了以下內容:

你應該只使用NDK,如果它對你的應用程序至關重要, 因為你只是喜歡用C / C ++編程。

我的印像是你應該使用你喜歡的語言,只要它適合這項工作。 有人可以解釋為什麼不建議不使用C / C ++進行Android開發嗎?

原版的:

我將開始修補移動應用程序,特別是android,這是我當前手機的操作系統,我想知道用C ++(或至少核心,然後用Java包裝)編寫應用程序是一個可接受的選擇。

一些背景,我是一個計算機科學專業,已經修了3門C ++課程(介紹,中級,OOP,並在春季參加STL課程),只有1門Java課程(中級)。 因此,我對C ++更熟悉,更喜歡Java。 我在Android NDK頁面上看到了以下內容:

在Android上使用本機代碼通常不會帶來顯著的性能提升,但它總是會增加您的應用複雜性。 一般情況下,如果它對您的應用程序至關重要,您應該只使用NDK, 因為您只是喜歡用C / C ++編程。

  • 我的印像是你應該使用適合工作的語言以及你熟悉的語言
  • 我可能希望將應用程序移植到另一個支持C ++但不支持Java的移動平台,例如iOS
  • 雖然Java是一種高級語言,因此應該使開發更快,但我覺得開發速度會慢一點,因為我必須重新學習幾乎所有內容(因為我只使用了一門語言)

任何建議都會非常感激。

ps:關於這個主題的許多答案來自幾年前,並且很少有後續答案提到NDK允許在android 2.3及更新版本上開發完整的原生應用程序。


King的程序員使用C ++來實現他們的遊戲邏輯。 從他們的營業額來看,他們似乎做得很好。

根據我的經驗,C ++用於解決問題,而Java則用於避免問題。 我喜歡這兩種語言,但是當你編寫好的代碼時,C ++是非常有益的。 但是,到達那裡可能需要花費幾分鐘的時間。

您也可以為數據科學家推薦C ++,他們通常可以通過Python或R來完成他們的工作.C ++可以做同樣好的或不好的性能,但它只是成為語言的天才。 這就是為什麼我永遠不會向想要這樣做的人推薦C ++的原因 - 我只是提出他們所處的待遇。


我從以下http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/找到了這篇有趣的文章: http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/

C ++是專門為平台獨立而構建的,因此可以在現有的每個操作系統上找到。 您的典型移動用戶可能知道Android應用程序是使用Objective-C編寫的Java和iOS應用程序,但許多人不知道的是,您的設備內存中的C / C ++代碼比其他任何內容都多。 C / C ++驅動小型設備的大部分技術(如內核,它與硬件交互,以及典型的運行時庫)和支持這些設備的電信網絡。 更重要的是,對於開發團隊來說,有任何C / C ++接口和庫可用於任何設備和平台上需要做的事情。 Android NDK工具集是最初為遊戲開發團隊添加的完整C / C ++支持的一個很好的例子,通過避免Java和Android Java運行時Dalvik(其中的虛擬機)使他們能夠從設備中獲得最佳性能。執行Android Java代碼。 它經常得到改進,以支持每個Android服務。


我會說使用java作為主應用程序。 但是如果你有一些c ++代碼你需要移植或者你需要的庫在c ++中有效實現,那麼使用ndk來獲取那些位


這樣想吧。 您可以使用Java SDK構建一個完整的工作應用程序,該應用程序利用開發人員可用的100%API。 NDK無法通過SDK完成任何操作(從API角度來看),NDK只提供更高的性能。

現在反過來看一下。 如果您選擇在NDK中100%編寫應用程序,您仍然可以編寫功能齊全的應用程序,但是您可以訪問的框架API數量有限。 並非所有Android框架都可以在本機層訪問; 大多數API僅限Java。 這並不是說可能需要的所有API在NDK中都不可用,但是所有 API都無法接近。

除此之外,NDK還引入了特定於平台的代碼,擴展了分發的大小。 對於您打算支持的每個設備體系結構,您的本機代碼必須內置到.so文件中(一個用於armv5,armv7和x86),這些文件都打包到同一個APK中。 這種可執行代碼的重複使您的應用程序大小(即“胖二進制”),除非您在分發應用程序時承擔為每個體系結構構建單獨的APK的任務。 因此,如果您不希望APK顯著增加,則部署過程會變得更加有效。

同樣,雖然這一切都沒有阻止你做你選擇的事情,但它指出了為什麼谷歌將Java描述為大多數代碼的“首選”方法和阻力最小的路徑。 我希望它能說明為什麼文檔的措辭方式如此。





c++