A. 移動應用軟體的程序開發 需要學什麼語言
基礎:java基礎+j2me
針對不同的系統,可能還需要看一下特殊的介面,不過多數應用層(咱們開發手機軟體的)都使用JAVA。
android手機(也是現在最火的系統,在手機及平板電腦佔有量巨大),需要再專門看Android開發,或Google Android API,其實他是C實現的底層,Java實現的上層,但對於開發應用軟體來說java足夠了,不需要改底層的東西,但如果想自己的程序更高效,更加定製話,那還等需要一些C的基礎,及OpenGL等基礎(主要是2D,3D界面)。Android系統上的應用層的開發,其實是Java與XML的綜合應用。
B. Android SDK 各版本之間有什麼差異
一、Android1、1
2008 年9月發布的Android第一版
二、Android1、5 Cupcake (紙杯蛋糕)
2009年4月30日,官方1、5版本(Cupcake 紙杯蛋糕)的Android發布。主要的更新如下:
1、拍攝/播放影片,並支持上傳到Youtube
2、支持立體聲藍牙耳機,同時改善自動配對性能
3、最新的採用WebKit技術的瀏覽器,支持復制/貼上和頁面中搜索
4、GPS性能大大提高
5、提供屏幕虛擬鍵盤
6、主屏幕增加音樂播放器和相框widgets
7、應用程序自動隨著手機旋轉
8、簡訊、Gmail、日暦,瀏覽器的用戶介面大幅改進,如Gmail可以批量刪除郵件
9、相機啟動速度加快,拍攝圖片可以直接上傳到Picasa
10、來電照片顯示
三、Android1、6 Donut (甜甜圈)
2009年9月15日,1、6(Donut 甜甜圈)版本軟體開發工具包發布。主要的更新如下:
1、重新設計的Android Market手勢
2、支持支持CDMA網路
3、文字轉語音系統(Text-to-Speech)
4、快速搜索框
5、全新的拍照介面
6、查看應用程序耗電
7、支持虛擬私人網路(VPN)
8、支持更多的屏幕解析度。
9、支持OpenCore2媒體引擎
10、新增面向視覺或聽覺困難人群的易用性插件
四、Android2、0/2、0、1/2、1 Eclair (松餅)
2009年10月26日,2、0(Eclair 松餅)版本軟體開發工具包發布。主要的更新如下:
1、優化硬體速度
2、"Car Home"程序
3、支持更多的屏幕解析度
4、改良的用戶界面
5、新的瀏覽器的用戶介面和支持HTML5
6、新的聯系人名單
7、更好的白色/黑色背景比率
8、改進Google Maps3、1、2
9、支持Microsoft Exchange
10、支持內置相機閃光燈
11、支持數碼變焦
12、改進的虛擬鍵盤
13、支持藍牙2、1
14、支持動態桌面的設計
五、Android2、2/2、2、1Froyo(凍酸奶)
2010年5月20日,2、2(Froyo 凍酸奶)版本軟體開發工具包發布。主要的更新如下:
1、整體性能大幅度的提升
2、3G網路共享功能。
3、Flash的支持。
4、App2sd功能。
5、全新的軟體商店。
6、更多的Web應用API介面的開發。
六、Android2、3 Gingerbread (姜餅)
2011年2月2日, 3、0(Honeycomb 蜂巢)版本主要更新如下:
1·優化針對平板
2·全新設計的UI增強網頁瀏覽功能
3、·n-app purchases功能
七、Android3、1 Honeycomb (蜂巢)
2011年5月11日在Google I/O開發者大會宣布發布,版本主要更新如下:
1、Honeycomb 蜂巢(改進3、0BUG)
2、經過優化的Gmail電子郵箱;
3、全面支持GoogleMaps
4、將Android手機系統跟平板系統再次合並從而方便開發者。
5、任務管理器可滾動,支持USB 輸入設備(鍵盤、滑鼠等)。
6、支持 Google TV、可以支持XBOX 360無線手柄
7、widget支持的變化,能更加容易的定製屏幕widget插件。
八、Android3、2 Honeycomb (蜂巢)
2011年7月13日發布,版本更新如下:
1、支持7英寸設備
2、引入了應用顯示縮放功能.
九、Android4、0 Ice Cream 「冰激凌三明治」
2011年10月19日 在香港發布,4、0(Ice Cream Sandwich 冰激凌三明治)版本主要更新如下:
1、藍色主題
2、接近於桌面版的Chrome Lite瀏覽器,有離線閱讀,同步Chrome書簽,新的標簽樣式等。
3、截圖功能
4、更強大的圖片編輯功能
5、自帶照片應用堪比Instagram,可以加濾鏡、加相框,進行360度全景拍攝,照片還能根據地點來排序
6、Gmail加入手勢、離線搜索功能,UI更強大。
7、新功能People:以聯系人照片為核心,界面偏重滑動而非點擊,集成了Twitter、Linkedin、Google+等通訊工具。有望支持用戶自定義添加第三方服務。
8、新增流量管理工具,可具體查看每個應用產生的流量。
9、正在運行的程序可以像電腦一樣的互相切換
10、人臉識別功能
11、系統優化、速度更快
12、支持虛擬按鍵,手機可以不再擁有任何按鍵
13、專為3D優化的驅動
14、平板電腦和智能手機通用
十、Android 4、3 Jelly Bean「果凍豆」
2013年7月15日 發布,4、3( Jelly Bean 果凍豆)版本主要更新如下:
1、Nexus 裝置在 Google Play 播放影片時,可開啟 Fraunhofer Cingo 提供的虛擬環繞音效效果。
2、 在撥號盤上輸入數字,會自動建議符合名字或號碼的聯系人。此功能可開啟或關閉。
3、 屏幕觸控輸入的演算法做了改進,讓輸入文字變得更容易。
4、 游戲手把或游戲桿的輸入延遲(latency)降低。
5、 無需開啟 Wi-Fi,即可利用 Wi-Fi 做定位的輔助。
6、 支持 BluetoothSmart(先前稱為 Bluetooth Low Energy),Nexus 4 與新 Nexus 7 現在已經是 Bluetooth Smart Ready 裝置。
7、 支持藍牙 AVRCP 1.3 版,可在車用音響上顯示歌名。
8、 「已停用」應用程序分頁:在「設定」→「應用程序」中新增「已停用」分頁,可統一管理已停用的應用程序。
9、 支持 OpenGL ES 3.0,可提供下一代畫質更佳的 3D 游戲體驗。
10、支持新 Nexus 7 與 Nexus 10 的屏幕無線傳輸功能,可將屏幕畫面無線投射到電視上。
11、支持更多語言:南非語(Afrikanns)、阿姆哈拉語(Amharic)、印地語(Hindi)、斯瓦希里語(Swahili)、祖魯語(Zulu)。
12、主畫面、設定、電話、聯系人應用程序可支持右向左寫語言(RTL,如希伯來語、阿拉伯語)
13、支持「限制賬號」,可設定讓裝置只能使用特定應用程序與內容。
14、簡化設定精靈,讓首次開機的設定更容易
15、在鎖定畫面切換用戶賬號的速度更快
C. Android 重學系列 View的繪制流程(六) 硬體渲染(上)
本文開始聊聊Android中的硬體渲染。如果跟著我的文章順序,從SF進程到App進程的繪制流程一直閱讀,我們到這里已經有了一定的基礎,可以試著進行橫向比對如Chrome瀏覽器渲染流程,看看軟體渲染,硬體渲染,SF合成都做了什麼程度的優化。
先讓我們回顧一下負責硬體渲染的主體對象ThreadedRenderer在整個繪制流程中做了哪幾個步驟。
在硬體渲染的過程中,有一個很核心的對象RenderNode,作為每一個View繪制的節點對象。
當每一次進行准備進行繪制的時候,都會雷打不動執行如下三個步驟:
如果遇到什麼問題歡迎來到 https://www.jianshu.com/p/c84bfa909810 下進行討論
實際上整個硬體渲染的設計還是比較龐大。因此本文先聊聊ThreadedRender整個體系中主要對象的構造以及相關的原理。
首先來認識下面幾個重要的對象有一個大體的印象。
在Java層中面向Framework中,只有這么多,下面是一一映射的簡圖。
能看到實際上RenderNode也會跟著View 樹的構建同時一起構建整個顯示層級。也是因此ThreadedRender也能以RenderNode為線索構建出一套和軟體渲染一樣的渲染流程。
僅僅這樣?如果只是這么簡單,知道我習慣的都知道,我喜歡把相關總結寫在最後。如果把總攬寫在正文開頭是因為設計比較繁多。因為我們如果以流水線的形式進行剖析容易造成迷失細節的困境。
讓我繼續介紹一下,在硬體渲染中native層的核心對象。
如下是一個思維導圖:
有這么一個大體印象後,就不容易迷失在源碼中。我們先來把這些對象的實例化以及上面列舉的ThreadedRenderer在ViewRootImpl中執行行為的順序和大家來聊聊其原理,先來看看ThreadedRenderer的實例化。
當發現mSurfaceHolder為空的時候會調用如下函數:
而這個方法則調用如下的方法對ThreadedRenderer進行創建:
文件:/ frameworks / base / core / java / android / view / ThreadedRenderer.java
能不能創建的了ThreadedRenderer則決定於全局配置。如果ro.kernel.qemu的配置為0,說明支持OpenGL 則可以直接返回true。如果qemu.gles為-1說明不支持OpenGL es返回false,只能使用軟體渲染。如果設置了qemu.gles並大於0,才能打開硬體渲染。
我們能看到ThreadedRenderer在初始化,做了三件事情:
關鍵是看1-3點中ThreadRenderer都做了什麼。
文件:/ frameworks / base / core / jni / android_view_ThreadedRenderer.cpp
能看到這里是直接實例化一個RootRenderNode對象,並把指針的地址直接返回。
能看到RootRenderNode繼承了RenderNode對象,並且保存一個JavaVM也就是我們所說的Java虛擬機對象,一個java進程全局只有一個。同時通過getForThread方法,獲取ThreadLocal中的Looper對象。這里實際上拿的就是UI線程的Looper。
在這個構造函數有一個mDisplayList十分重要,記住之後會頻繁出現。接著來看看RenderNode的頭文件:
文件:/ frameworks / base / libs / hwui / RenderNode.h
實際上我把幾個重要的對象留下來:
文件:/ frameworks / base / core / java / android / view / RenderNode.java
能看到很簡單,就是包裹一個native層的RenderNode返回一個Java層對應的對象開放Java層的操作API。
能看到這個過程生成了兩個對象:
這個對象實際上讓RenderProxy持有一個創建動畫上下文的工廠。RenderProxy可以通過ContextFactoryImpl為每一個RenderNode創建一個動畫執行對象的上下文AnimationContextBridge。
文件:/ frameworks / base / libs / hwui / renderthread / RenderProxy.cpp
在這里有幾個十分重要的對象被實例化,當然這幾個對象在聊TextureView有聊過( SurfaceView和TextureView 源碼淺析 ):
我們依次看看他們初始化都做了什麼。
文件:/ frameworks / base / libs / hwui / renderthread / RenderThread.cpp
能看到其實就是簡單的調用RenderThread的構造函數進行實例化,並且返回對象的指針。
RenderThread是一個線程對象。先來看看其頭文件繼承的對象:
文件:/ frameworks / base / libs / hwui / renderthread / RenderThread.h
其中RenderThread的中進行排隊處理的任務隊列實際上是來自ThreadBase的WorkQueue對象。
文件:/ frameworks / base / libs / hwui / thread / ThreadBase.h
ThreadBase則是繼承於Thread對象。當調用start方法時候其實就是調用Thread的run方法啟動線程。
另一個更加關鍵的對象,就是實例化一個Looper對象到WorkQueue中。而直接實例化Looper實際上就是新建一個Looper。但是這個Looper並沒有獲取當先線程的Looper,這個Looper做什麼的呢?下文就會揭曉。
WorkQueue把一個Looper的方法指針設置到其中,其作用可能是完成了某一件任務後喚醒Looper繼續工作。
而start方法會啟動Thread的run方法。而run方法最終會走到threadLoop方法中,至於是怎麼走進來的,之後有機會會解剖虛擬機的源碼線程篇章進行講解。
在threadloop中關鍵的步驟有如下四個:
在這個過程中創建了幾個核心對象:
另一個核心的方法就是,這個方法為WorkQueue的Looper注冊了監聽:
能看到在這個Looper中注冊了對DisplayEventReceiver的監聽,也就是Vsync信號的監聽,回調方法為displayEventReceiverCallback。
我們暫時先對RenderThread的方法探索到這里,我們稍後繼續看看回調後的邏輯。
文件:/ frameworks / base / libs / hwui / thread / ThreadBase.h
能看到這里的邏輯很簡單實際上就是調用Looper的pollOnce方法,阻塞Looper中的循環,直到Vsync的信號到來才會繼續往下執行。詳細的可以閱讀我寫的 Handler與相關系統調用的剖析 系列文章。
文件:/ frameworks / base / libs / hwui / thread / ThreadBase.h
實際上調用的是WorkQueue的process方法。
文件:/ frameworks / base / libs / hwui / thread / WorkQueue.h
能看到這個過程中很簡單,幾乎和Message的loop的邏輯一致。如果Looper的阻塞打開了,則首先找到預計執行時間比當前時刻都大的WorkItem。並且從mWorkQueue移除,最後添加到toProcess中,並且執行每一個WorkItem的work方法。而每一個WorkItem其實就是通過從某一個壓入方法添加到mWorkQueue中。
到這里,我們就明白了RenderThread中是如何消費渲染任務的。那麼這些渲染任務又是哪裡誕生呢?
上文聊到了在RenderThread中的Looper會監聽Vsync信號,當信號回調後將會執行下面的回調。
能看到這個方法的核心實際上就是調用drainDisplayEventQueue方法,對ui渲染任務隊列進行處理。
能到在這里mVsyncRequested設置為false,且mFrameCallbackTaskPending將會設置為true,並且調用queue的postAt的方法執行ui渲染方法。
還記得queue實際是是指WorkQueue,而WorkQueue的postAt方法實際實現如下:
/ frameworks / base / libs / hwui / thread / WorkQueue.h
情景帶入,當一個Vsync信號達到Looper的監聽者,此時就會通過WorkQueue的drainDisplayEventQueue 壓入一個任務到隊列中。
每一個默認的任務都是執行dispatchFrameCallback方法。這里的判斷mWorkQueue中是否存在比當前時間更遲的時刻,並返回這個WorkItem。如果這個對象在頭部needsWakeup為true,說明可以進行喚醒了。而mWakeFunc這個方法指針就是上面傳下來:
把阻塞的Looper喚醒。當喚醒後就繼續執行WorkQueue的process方法。也就是執行dispatchFrameCallbacks方法。
在這里執行了兩個事情:
先添加到集合中,在上面提到過的threadLoop中,會執行如下邏輯:
如果大小不為0,則的把中的IFrameCallback全部遷移到mFrameCallbacks中。
而這個方法什麼時候調用呢?稍後就會介紹。其實這部分的邏輯在TextureView的解析中提到過。
接下來將會初始化一個重要對象:
這個對象名字叫做畫布的上下文,具體是什麼上下文呢?我們現在就來看看其實例化方法。
文件:/ frameworks / base / libs / hwui / renderthread / CanvasContext.cpp
文件:/ device / generic / goldfish / init.ranchu.rc
在init.rc中默認是opengl,那麼我們就來看看下面的邏輯:
首先實例化一個OpenGLPipeline管道,接著OpenGLPipeline作為參數實例化CanvasContext。
文件:/ frameworks / base / libs / hwui / renderthread / OpenGLPipeline.cpp
能看到在OpenGLPipeline中,實際上就是存儲了RenderThread對象,以及RenderThread中的mEglManager。透過OpenGLPipeline來控制mEglManager進而進一步操作OpenGL。
做了如下操作:
文件:/ frameworks / base / libs / hwui / renderstate / RenderState.cpp
文件:/ frameworks / base / libs / hwui / renderthread / DrawFrameTask.cpp
實際上就是保存這三對象RenderThread;CanvasContext;RenderNode。
文件:/ frameworks / base / core / jni / android_view_ThreadedRenderer.cpp
能看到實際上就是調用RenderProxy的setName方法給當前硬體渲染對象設置名字。
文件:/ frameworks / base / libs / hwui / renderthread / RenderProxy.cpp
能看到在setName方法中,實際上就是調用RenderThread的WorkQueue,把一個任務隊列設置進去,並且調用runSync執行。
能看到這個方法實際上也是調用post執行排隊執行任務,不同的是,這里使用了線程的Future方式,阻塞了執行,等待CanvasContext的setName工作完畢。
D. 手機openGl是什麼意思
編程作圖
E. 怎麼成為安卓工程師
成為安卓工程師需要具備的知識:
1.計算機及相關專業本科以上學歷,英語良好,能閱讀英文資料;
2.3年以上JAVA開發或移動應用項目開發經驗,具備良好的編程習慣;
3.熟悉資料庫開發;掌握多線程、TCP/IP Socket/HTTP 網路通信編程;
4.熟悉Android系統體系結構和軟體開發技術,掌握Android應用實現機制,Android平台UI設計和常用布局;
5.熟悉Android平台UI開發;熟悉Eclipse或MyEclipse集成開發環境;
6.具有正式發布產品的項目經驗;有良好的面向對象分析、設計能力、規范的編程風格和良好文檔管理習慣;
作為開發人員,應當在學習並深入了解Android之後,在自己的軟體中,將Android的優勢發揮出來,同時通過一些手段去彌補Android 本身的缺陷或不足。Android擁有的特點:與硬體交互非常方便,包括攝像頭、GPS 等,都可以簡單的操作;擁有自己的運行時和虛擬機,優秀的內存管理能力;提供豐富的界面控制項供開發者使用,允許可視化開發,並保證Android平台下的應用程序界面一致;提供輕量級的進程間通信機制;支持後台服務類應用程序;支持高效、快速的數據存取方式。
Android開發工程師三個階段必須掌握的技能:
1、初級:擁有嫻熟的Java基礎,理解設計模式,比如OOP語言的工廠模式要懂得。掌握AndroidUI控制項、AndroidJava層API相關使用。
2、中級:邁向中級,最好再次更新下Java技術,掌握Javaconcurrent庫、nio庫,精通xml、json解析,做過socketc/s端的程序。內容包括:熟練掌握NDKJNI方式的開發,對Androidframework十分了解。移植一些開源項目,比如FFmpeg、Mplayer到Android上運行。
3、高級:邁向高級,熟悉android開源代碼的結構,中間件下層的庫,比如webkit、opencore、opengl。熟練的Linux驅動開發,精通Linux內核結構。掌握Android移植,比如常見的TIOMAP、QualcommMSM的硬體移植。
邁向頂尖,發現Android體系中的0day漏洞,能夠輕松的找出Root體系的10種方法,協助Google改進Android操作體系。
Android不但是手機操作體系,使用於智能手機領域,也是一個可以廣泛用於平板電腦、花費電子、智能家電領域內的歸納開發渠道,其使用領域和市場份額處於急速擴大期。近來,筆者從國內搶先的嵌入式及移動開發專業組織-華清遠見集團獲悉:跟著國內3G職業的迅猛發展,其上千家合作企業對Android開發人才、特別是Android底層體系開發人才的需求量也出現爆破式急速增加的態勢,而兼具Android使用開發和體系底層開發的全才型Android開發工程師更是變成職業稀缺。
而目前企業急缺的,真正需要的Android工程師不只是軟體開發工程師,而是兼具Android應用開發和底層系統開發的全才型工程師。也就是說,Android開發不只是Java開發,Android系統實際上是嵌入式操作系統,是基於Linux內核的嵌入式系統。基於這個形勢,能夠幫助我們更加清楚安卓開發工程師應該具備的能力方向。
F. 安卓開發課程分為哪幾個階段
安卓越的安卓開發課程分為5個階段,共768課時,第一階段:android介紹與Java核心部分 (168課時)
第二階段:Android基礎編程 (152課時) 第三階段:專項技能突破(160課時)第四階段:高級篇(48課時)Android OpenGL 開發基礎 OpenGL基本知識、OpenGL和OpenGl ES介紹 掌握OpenGL開發技巧
第五階段:高級篇(112課時) Android項目實戰 掏客(個人媒體客戶端)
G. 在Android上開發一個3D游戲需要用到哪些技術
Android開源游戲引擎是Android游戲開發的基礎,選擇一個好的Android游戲開發的引擎能讓我們更好的來開發游戲,下面就為大家簡紹幾個Android開源游戲引擎。
1、Angle
Angle是一款專為Android平台設計的,敏捷且適合快速開發的2D游戲引擎,基於OpenGL ES技術開發。該引擎全部用Java代碼編寫,並且可以根據自己的需要替換裡面的實現,缺陷在於文檔不足,而且下載的代碼中僅僅包含有少量的示例教程。
2、Rokon
rokon是一款Android 2D游戲引擎,基於OpenGL ES技術開發,物理引擎為Box2D,因此能夠實現一些較為復雜的物理效果,該項目最新版本為 2.0.3 (09/07/10)。總體來說,此引擎最大的優點在於其開發文檔相當之完備,並且項目作者對反饋Bug的修正非常之神速,所以該框架的使用在目前也最為 廣泛,有人乾脆將它稱為Cocos2d-iPhone引擎的Android版(業務邏輯和編碼風格上也確實很像)。附帶一提,國內某個需要注冊會員才能下 載的Android游戲框架衍生於此框架,所以大家也不要刻板的認為收費便一定是好的,免費就一定不好,最低運行環境要求為Android 1.5。
3、LGame
LGame是一款國人開發的Java游戲引擎,有Android及PC(J2SE)兩個開發版本,目前最高版本同為0.2.6(31/07/10)。其底 層繪圖器LGrpaphics封裝有J2SE以及J2ME提供的全部Graphics API(PC版採用Graphics2D封裝,Android版採用Canvas模擬實現),所以能夠將J2SE或J2ME開發經驗直接套用其中,兩版本 間主要代碼能夠相互移植。Android版內置有Admob介面,可以不必配置XML直接硬編碼Admob廣告信息。
該引擎除了基本的音效、圖形、物理、精靈等常用組件以外,也內置有Ioc、xml、http等常用Java組件的封裝,代價是jar體積較為龐大,PC版 已突破1.2MB,Android版有所簡化也在500KB左右。此外,該引擎還內置有按照1:1實現的J2ME精靈類及相關組件,可以將絕大多數 J2ME游戲平移到Android或PC版中。唯一遺憾的是,該項目作者是個極其懶惰的傢伙,開發文檔從去年說到今年依舊沒有提供,只有游戲示例可供下 載。
4、jPCT
jPCT是一款基於OpenGL技術開發的3D圖形引擎(PC環境為標准OpenGL,Android為OpenGL ES), 以Java語言為基礎的,擁有功能強大的Java 3D解決方案。該引擎與LGame(此為2D游戲引擎)相類似,目前擁有PC(J2SE)以及Android兩個開發版本。
jPCT的最大優勢之一,就在於它驚人的向下兼容性。在PC環境中,jPCT甚至可以運行在JVM1.1環境之中,因為jPCT內部提供的圖形渲染介面完 全符合所有的Java 1.1規范(就連已經消失的Microsoft VM乃至更古老的Netscape 4 VM也不例外)。
5、Catcake
Catcake是一款跨平台的Java 3D圖形引擎,目前支持PC(J2SE)及Android環境運行(已有iPhone版規劃)。該引擎在易用性和運行性能上皆有出色的表現,支持常見的游戲開發功能,諸如精靈動畫,音頻處理和視頻播放等。
轉網路知道
H. android 可以用go 語言嗎
Go語言將支持Android
概述
我們建議將Go語言引入Android平台,重點是用Go語言編寫游戲程序,API將在Android
NDK中定義。
背景
Android平台被設定為一個多應用操作系統,一個相對於傳統UNIX系統來說更依賴於網路庫和服務的操作系統,這意味著我們將為Go運行時開放更多的API。
將Golang帶入Android平台是一件非常糟糕的事情,因為Android本身是Java構建的並且擁有巨量的API,任何試圖將這些API用Go替代的結果將會導致一個非常糟糕的結果。無論是手工建立包裝類還是自動建立都會導致程序運行非常緩慢。
然而如果使用基於C的API,通過AndroidNDK來編寫一些游戲類程序可能會帶來意想不到的收獲。
提議
在Golang
1.4周期中,Android平台的編譯將納入Go的源,並且包含Android支持的cgo(由Elias
Naur貢獻)。Dalvik-loadable
.so外部連接文件的支持也會由Android
NDK提供。
在發布上我們仍然提供交叉平台編譯,並且支持在Linux主機上adb工具在Android設備上測試程序。
我們將會提供一個名叫go.mobile的子版本,包含:
1、通過Android
NDK對OpenGL,OpenSL和OpenMAX的支持。
2、一個Java->Go的工具,支持通過Java調用Go的Package,所以許多游戲的菜單UI可以通過標准SDK構建。(有可能會支持通過其他語言調用Go,比如Objective-C。)
3、集成AndroidStudio
新特性將會在Go1.4穩定版中提供。
I. android下的openGL開發
這個建議買本教材看看,現在這樣的教材很多。
OpenGL ES 2.0
In this document
Create an Activity with GLSurfaceView
Draw a Shape on GLSurfaceViewDefine a Triangle
Draw the Triangle
Apply Projection and Camera Views
Add Motion
Respond to Touch Events
Related Samples
API Demos - graphics
OpenGL ES 2.0 Sample
TouchRotateActivity
See also
3D with OpenGL
OpenGL ES 1.0
This tutorial shows you how to create a simple Android application that uses the OpenGL ES 2.0 API to perform some basic graphics operations. You'll learn how to:
•Create an activity using GLSurfaceView and GLSurfaceView.Renderer
•Create and draw a graphic object
•Define a projection to correct for screen geometry
•Define a camera view
•Rotate a graphic object
•Make graphics touch interactive
The Android framework supports both the OpenGL ES 1.0/1.1 and OpenGL ES 2.0 APIs. You should carefully consider which version of the OpenGL ES API (1.0/1.1 or 2.0) is most appropriate for your needs. For more information, see Choosing an OpenGL API Version. If you would prefer to use OpenGL ES 1.0, see the OpenGL ES 1.0 tutorial.
Before you start, you should understand how to create a basic Android application. If you do not know how to create an app, follow the Hello World Tutorial to familiarize yourself with the process.
Caution: OpenGL ES 2.0 is currently not supported by the Android Emulator. You must have a physical test device running Android 2.2 (API Level 8) or higher in order to run and test the example code in this tutorial.
Create an Activity with GLSurfaceView
To get started using OpenGL, you must implement both a GLSurfaceView and a GLSurfaceView.Renderer. The GLSurfaceView is the main view type for applications that use OpenGL and the GLSurfaceView.Renderer controls what is drawn within that view. (For more information about these classes, see the 3D with OpenGL document.)
To create an activity using GLSurfaceView:
1.Start a new Android project that targets Android 2.2 (API Level 8) or higher.
2.Name the project HelloOpenGLES20 and make sure it includes an activity called HelloOpenGLES20.
3.Modify the HelloOpenGLES20 class as follows: package com.example.android.apis.graphics;import android.app.Activity;import android.content.Context;import android.opengl.GLSurfaceView;import android.os.Bundle;public class HelloOpenGLES20 extends Activity { private GLSurfaceView mGLView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Create a GLSurfaceView instance and set it // as the ContentView for this Activity mGLView = new HelloOpenGLES20SurfaceView(this); setContentView(mGLView); } @Override protected void onPause() { super.onPause(); // The following call pauses the rendering thread. // If your OpenGL application is memory intensive, // you should consider de-allocating objects that // consume significant memory here. mGLView.onPause(); } @Override protected void onResume() { super.onResume(); // The following call resumes a paused rendering thread. // If you de-allocated graphic objects for onPause() // this is a good place to re-allocate them. mGLView.onResume(); }} class HelloOpenGLES20SurfaceView extends GLSurfaceView { public HelloOpenGLES20SurfaceView(Context context){ super(context); // Create an OpenGL ES 2.0 context. setEGLContextClientVersion(2); // Set the Renderer for drawing on the GLSurfaceView setRenderer(new HelloOpenGLES20Renderer()); }}
Note: You will get a compile error for the HelloOpenGLES20Renderer class reference. That's expected; you will fix this error in the next step.
As shown above, this activity uses a single GLSurfaceView for its view. Notice that this activity implements crucial lifecycle callbacks for pausing and resuming its work.
The HelloOpenGLES20SurfaceView class in this example code above is just a thin wrapper for an instance of GLSurfaceView and is not strictly necessary for this example. However, if you want your application to monitor and respond to touch screen events—and we are guessing you do—you must extend GLSurfaceView to add touch event listeners, which you will learn how to do in the Reponding to Touch Events section.
In order to draw graphics in the GLSurfaceView, you must define an implementation of GLSurfaceView.Renderer. In the next step, you create a renderer class to complete this OpenGL application.
4.Create a new file for the following class HelloOpenGLES20Renderer, which implements the GLSurfaceView.Renderer interface: package com.example.android.apis.graphics;import javax.microedition.khronos.egl.EGLConfig;import javax.microedition.khronos.opengles.GL10;import android.opengl.GLES20;import android.opengl.GLSurfaceView;public class HelloOpenGLES20Renderer implements GLSurfaceView.Renderer { public void onSurfaceCreated(GL10 unused, EGLConfig config) { // Set the background frame color GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); } public void onDrawFrame(GL10 unused) { // Redraw background color GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT); } public void onSurfaceChanged(GL10 unused, int width, int height) { GLES20.glViewport(0, 0, width, height); } }
This minimal implementation of GLSurfaceView.Renderer provides the code structure needed to use OpenGL drawing methods:
◦onSurfaceCreated() is called once to set up the GLSurfaceView environment.
◦onDrawFrame() is called for each redraw of the GLSurfaceView.
◦onSurfaceChanged() is called if the geometry of the GLSurfaceView changes, for example when the device's screen orientation changes.
For more information about these methods, see the 3D with OpenGL document.
The code example above creates a simple Android application that displays a grey screen using OpenGL ES 2.0 calls. While this application does not do anything very interesting, by creating these classes, you have layed the foundation needed to start drawing graphic elements with OpenGL ES 2.0.
If you are familiar with the OpenGL ES APIs, these classes should give you enough information to use the OpenGL ES 2.0 API and create graphics. However, if you need a bit more help getting started with OpenGL, head on to the next sections for a few more hints.
Note: If your application requires OpenGL 2.0, make sure you declare this in your manifest:
<!-- Tell the system this app requires OpenGL ES 2.0. --> <uses-feature android:glEsVersion="0x00020000" android:required="true" />
For more information, see OpenGL manifest declarations in the 3D with OpenGL document.
J. 移動應用開發需要學什麼
首先,做主題和做應用是兩碼事,做主題是切圖,做圖,做應用的話就要寫代碼了。兩條路,要慎重。
學習ios和Android也是兩碼事,ios語言是OC和swift,Android的話就是Java。
ios門檻要高一些,你需要一台裝在Mac OS的電腦(推薦MBR),一台iPhone(可選),每年交年費。
Android的話門檻低一些,但是入門快,最大的痛苦是官網被牆了,
如果不是計算機專業,那就自己辛苦一些,多聽聽計算機專業的課,畢竟基礎還是蠻重要的,當然多寫代碼更重要。
具體學習:
在微博裡面有課程,所有知識都涵蓋