『壹』 有誰學過android源代碼中SKIA部分內容的我想深入學習SKIA ,不是j簡單JAVA層的調用,最好深入到每個函數
從Honeycomb[3.x]版本起,Andorid便支持GPU加速,但目前Android並沒有使用Skia GPU進行Webkit渲染。Skia GPU使用OpenGL進行後台加速渲染,未來也許會代替Skia。
很多人覺得,即使Android成功使用了GPU加速Webkit渲染,在訪問瀏覽如雅虎等一般的網站時,用戶也感覺不到太大的差異。因為Webkit的資源大多數消耗在了Javascript腳本和布局定位上。
我們覺得Webkit使用GPU加速渲染的最大意義無非是HTML5 Canvas[HTML5的動態繪圖效果]。Android渲染Canvas動畫實在太慢,導致Web開發者根本無法在Android上用Canvas開發網頁游戲[要注意的是,目前很多手機和平板的應用程序以HTML5做為界面,並使用Webkit工作,這也是很多應用在Android系統上感覺「不流暢」的重要因素。譯者注]。
Android Webkit開發平台[NDK]使用Skia GPU加速測試
我們對Android系統使用Skia GPU加速的Webkit進行了測試。我們手上已經有Android Webkit NDK的WAC2.0版本,我使用了某個提交版本的Skia源碼,並開啟Skia GPU加速將其編譯進NDK中。
我並沒有使用Canvas加速,因為這還要增加修改GraphicsContextSkia API的工作,所以並未測試Canvas渲染的性能。
『貳』 手機打游戲用skia好嗎
好。
相比默認可以渲染效果使游戲畫面更流暢,但會消耗更大的內存。玩游戲時,消耗更大的內存一般是沒有影響的,但如果這時手機運行了很多應用,可能會引起手機變慢。
skia是個2D向量圖形處理函數庫,包含字型、坐標轉換,以及點陣圖都有高效能且簡潔的表現。不僅用於GoogleChrome瀏覽器,新興的Android開放手機平台也採用skia作為繪圖處理,搭配OpenGL/ES與特定的硬體特徵,強化顯示的效果。
『叄』 android軟體開發的架構
Android以Java為編程語言,使介面到功能,都有層出不窮的變化,其中Activity等同於J2ME的MIDlet,一個 Activity 類(class)負責創建視窗(window),一個活動中的Activity就是在 foreground(前景)模式,背景運行的程序叫做Service。兩者之間通過由ServiceConnection和AIDL連結,達到復數程序同時運行的效果。如果運行中的 Activity 全部畫面被其他 Activity 取代時,該 Activity 便被停止(stopped),甚至被系統清除(kill)。
View等同於J2ME的Displayable,程序人員可以通過 View 類與「XML layout」檔將UI放置在視窗上,Android 1.5的版本可以利用 View 打造出所謂的 Widgets,其實Widget只是View的一種,所以可以使用xml來設計layout,HTC的Android Hero手機即含有大量的widget。至於ViewGroup 是各種layout 的基礎抽象類(abstract class),ViewGroup之內還可以有ViewGroup。View的構造函數不需要在Activity中調用,但是Displayable的是必須的,在Activity 中,要通過findViewById()來從XML 中取得View,Android的View類的顯示很大程度上是從XML中讀取的。View 與事件(event)息息相關,兩者之間通過Listener 結合在一起,每一個View都可以注冊一個event listener,例如:當View要處理用戶觸碰(touch)的事件時,就要向Android框架注冊View.OnClickListener。另外還有Image等同於J2ME的BitMap。 在模擬器上運行模擬是虛擬設備(AVD),我們需要配置來運行我們的Android應用程序。步驟1、開放的AVD管理步驟2、新的按鈕,點擊添加新設備,並配置您的設備設置。步驟3、會有一個結果窗口顯示所有已配置你上一屏幕選擇。步驟4、按「確定」,你將會看到你的設備列在有你可以關閉此窗口。步驟5、運行你的Android應用程序項目從Eclipse,如果只有一個AVD配置,它會自動部署的應用程序也會出現一個窗口,選擇你的圖片。 模擬器將開始。在設備上運行
Android應用程序可以直接部署在Android設備上,這幾個配置所需要的。步驟1、在調試模式的設置可以設置應用程序:Android的<應用程序>元真可調試屬性。ADT 8這是默認的。步驟2、您的設備上啟用USB調試:Android 3.2或以上轉至設置>應用程序>開發和啟用USB調試。在Android 4更新,這是開發商選擇設置>。註:在Android 4.2更新,開發者選項是默認隱藏。可以,去設定>android的版本號。返回先前屏幕找到開發商選擇。步驟3、安裝USB驅動程序為您的設備,計算機識別你的設備。步驟4、一旦設置和您的設備通過USB連接,從Eclipse菜單欄安裝您的應用程序在設備上選擇運行>運行(或運行>調試)。 操作系統與應用程序的溝通橋梁,並用分為兩層:函數層(Library)和虛擬機(Virtual Machine)。 Bionic是 Android 改良libc的版本。Android 同時包含了Webkit,所謂的Webkit 就是Apple Safari瀏覽器背後的引擎。Surface flinger 是就2D或3D的內容顯示到屏幕上。Android使用工具鏈(Toolchain)為Google自製的Bionic Libc。
Android採用OpenCORE作為基礎多媒體框架。OpenCORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。
Android 使用skia 為核心圖形引擎,搭配OpenGL/ES。skia與linux Cairo功能相當,但相較於Linux Cairo, skia 功能還只是陽春型的。2005年Skia公司被Google收購,2007年初,Skia GL源碼被公開,Skia 也是Google Chrome 的圖形引擎。
Android的多媒體資料庫採用SQLite資料庫系統。資料庫又分為共用資料庫及私用資料庫。用戶可通過ContentResolver類(Column)取得共用資料庫。
Android的中間層多以Java 實現,並且採用特殊的Dalvik虛擬機(Dalvik Virtual Machine)。Dalvik虛擬機是一種「暫存器型態」(Register Based)的Java虛擬機,變數皆存放於暫存器中,虛擬機的指令相對減少。
Dalvik虛擬機可以有多個實例(instance), 每個Android應用程序都用一個自屬的Dalvik虛擬機來運行,讓系統在運行程序時可達到優化。Dalvik虛擬機並非運行Java位元組碼(Bytecode),而是運行一種稱為.dex格式的文件。 Android 的 HAL(硬體抽像層)是能以封閉源碼形式提供硬體驅動模塊。HAL 的目的是為了把 Android framework 與 Linux kernel 隔開,讓 Android 不至過度依賴 Linux kernel,以達成 kernel independent 的概念,也讓 Android framework 的開發能在不考慮驅動程序實現的前提下進行發展。
HAL stub 是一種代理人(proxy)的概念,stub 是以 *.so 檔的形式存在。Stub 向 HAL「提供」操作函數(operations),並由 Android runtime 向 HAL 取得 stub 的 operations,再 callback 這些操作函數。HAL 里包含了許多的 stub(代理人)。Runtime 只要說明「類型」,即 mole ID,就可以取得操作函數。 Android 是運行於 Linux kernel之上,但並不是GNU/Linux。因為在一般GNU/Linux 里支持的功能,Android 大都沒有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic 取代Glibc、以Skia 取代Cairo、再以opencore 取代FFmpeg 等等。Android 為了達到商業應用,必須移除被GNU GPL授權證所約束的部份,例如Android將驅動程序移到 userspace,使得Linux driver 與 Linux kernel徹底分開。bionic/libc/kernel/ 並非標準的kernel header files。Android 的 kernel header 是利用工具由 Linux kernel header 所產生的,這樣做是為了保留常數、數據結構與宏。
Android 的 Linux kernel控制包括安全(Security),存儲器管理(Memory Managemeat),程序管理(Process Management),網路堆棧(Network Stack),驅動程序模型(Driver Model)等。下載Android源碼之前,先要安裝其構建工具Repo來初始化源碼。Repo 是 Android 用來輔助Git工作的一個工具。
『肆』 安卓工程怎麼利用第三方庫,就是自己用C++編寫的編碼解碼程序,對圖片進行編碼解碼
你可以嘗試將構造函數和析構函數一起導出,並且,將編譯DLL文件時生成的LIB文件添加到調用DLL的項目中.
如果還不行,請將定義DLL的頭文件貼出來分析.
------------------------------------------------------------------
補充:
MFC擴展DLL只能由MFC的應用程序調用,請問你調用DLL的程序是什麼類型?
『伍』 如何從android源碼中編譯webkit
android本來自帶了webkit瀏覽器,但是要對其進行custom就需要android源代碼才行, 但是在沒有源碼的情況下,那麼就需要用到ndk了,比如,我是在xoom上做custom webkit的。
1、雖然ndk提供的庫很少,而且沒有skia,但是好在有bitmap,這樣顯示慢了點,沒有硬加速,但不是不可能。
2、webkit需要的第三方庫,freetype,png,jpeg,sqlite3等雖然android源碼中有,但是ndk沒有開放,因此所有的第三方庫,freetype,png,jpeg,sqlite3,cairo,curl,fontconfig,pixman,iconv等都需要用ndk cross-compile成靜態庫,然後鏈接到最終的動態庫中。
3、選擇iconv是icu太大,而且沒有多語言的需求,選擇cairo+pixman是skia的移植性不好,而且cairo支持很多種backend。
4、編譯第三方庫需要用到autoconfig,ndk中有如何生成交叉編譯鏈的文檔,然後在configure時使用這個工具鏈就可以了,但是android用到的是bionic庫,因此會有很少的地方需要修改,有些庫也不能生成test程序,但是靜態庫是沒問題的。
5、利用ndk生成的交叉工具鏈,在加上webkit自帶的cmake編譯系統,生成webkit的動態庫是沒有問題的,當然是webkit的內核,而且有些平台相關的部分代碼需要修改。
6、但是只要是以linux平台為基礎,修改還是很容易的,我移植的webkit是先移植到linux平台上,然後移植到android平台上的,所以修改相對少了很多,但是修改大多都在WebCore/platform下,在選擇了的平台相關庫後,做相應的配置和修改。
7、其次是在WebKit目錄,這個主要是支持和使用WebCore,因此在需求不是整個瀏覽器,而只是正常地顯示網頁時,還是可以寫的比較簡單的。
『陸』 Android中的多國語言是怎麼實現的
雖然Android 從 2.3 開始已經支持50種以上的語言,但是不是每種語言都有字體可以顯示。遇到一個新需求,
有客戶要求對 hindi 語言的支持。於是上 網找了一些資料,發現網上介紹的大部分是如何替換默認字體,就
是替換./frameworks/base/data/fonts /DroidSansFallback.ttf,但是替換完之後,中文就無法正常顯示。其實
只要有下面幾個步驟,就可以實現新曾加一種語言的顯示支持:
1. 需要有可以顯示 hindi 語言的字體,我在網上下載了一個:DroidHindi.ttf
2. 需要修改的地方主要有
1) 將下載的字體文件拷貝到:./frameworks/base/data/fonts/
2) 修改./frameworks/base/data/fonts/Android.mk,將 DroidHindi.ttf 添加到 _from:
3) Hindi 的語言代碼是 hi_IN,修改./device/qcom/common/common.mk,將 hindi 的語言代碼加進去,
這樣在你的設置->語言和鍵盤->選擇語言裡面就可以看見 hindi 語言了:
4) 修改./external/skia/src/ports/SkFontHost_android.cpp,將 DroidHindi.ttf 加進去。網上 介紹的很多
方法都沒有提到這一步,如果沒有這一步的話,添加的語言是不生效的,顯示的是亂碼,因為 android 無法
找到 hindi 語言可以顯示的字體, 還是會選擇默認字體去顯示。修改的地方為:
5) 去./build/target/proct/full.mk 看看系統選擇的是哪個語言列表,我的是:
$(call inherit-proct, build/target/proct/languages_small.mk)
那我就去修改./build/target/proct/languages_small.mk,若這里顯示的是 languages_full.mk,那麼
就修改./build/target/proct/languages_full.mk 文件,修改如下:
PRODUCT_LOCALES := en_US en_GB fr_FR hi_IN it_IT de_DE es_ES
6)在 external/icu4c/studata 下的 Android.mk 下添加
$(if $(findingstringhi,$(PRODUCT_LOCALS)),large)\
3. 剩下的就是重新編譯一下,然後 flash 到手機或模擬器上就可以了。
『柒』 用Android2.2的Skia庫的drawtext為什麼顯示不出文字
將Android.mk文件中的內容(頭文件來源於svn https://skia。googlecode。com/svn/trunk).
LOCAL_CXXFLAGS :=
LOCAL_C_INCLUDES := \
E:/NDKr5/sources/SKIA/include/core \
E:/NDKr5/sources/SKIA/include/config \
E:/NDKr5/sources/android/frameworks/base/include \
E:/NDKr5/sources/android/system/core/include \
E:/NDKr5/sources/android/frameworks/base/core/jni/android/graphics \
E:/NDKr5/sources/android/dalvik/libnativehelper/include
改成:(頭文件目錄在android2.2 (froyo)源代碼的skia中.)
E:/NDKr5/sources/android/external/skia/include/core \
E:/NDKr5/sources/android/external/skia/include/config \
E:/NDKr5/sources/android/frameworks/base/include \
E:/NDKr5/sources/android/system/core/include \
E:/NDKr5/sources/android/frameworks/base/core/jni/android/graphics \
E:/NDKr5/sources/android/dalvik/libnativehelper/include
就可以了.
已經在模擬器和真機上驗證了.
『捌』 Android系統原理及開發要點詳解的前 言
Android 是Google歷經數年和投資數億美元開發出來的智能手機系統,Google也發起了圍繞Android的組織——開放手機聯盟,其英文全稱為「Open Handset Alliance」。
隨著各大移動終端生產商大力開發和生產基於Android的移動智能設備,Android迅速得到業界和社會的認可,並成為整個產業的熱點,基於Android平台的各類人才逐漸成為各大企業競相爭奪的焦點。
Android系統是一個開放的系統,任何公司、個人開發者、愛好者都可以參與其中。對於技術工作者,Android不僅是一個智能手機的系統,也可以作為學習嵌入式Linux系統的較完整的軟體平台。
Android是一個較新的系統和技術,因此介紹Android的資料和書籍還比較少,尤其簡體中文的書籍,相對更少。本書《Android系統原理及開發要點詳解》 是一本綜合介紹Android系統的書,集合了Androidin社區多位專家作者的經驗,精心編寫而成。
Android 作為一個龐大的系統,包括了Linux操作系統、各種本地程序、虛擬機和運行環境、Java框架和Java應用程序多方面的內容。這對於初學者是一個非常大的挑戰,因此對於學習、研究進而開發Android系統來說,掌握系統的脈絡和使用恰當的學習方法是非常重要的,這也是本書的組織主旨。
本書特點
為了適應Android系統的情況,本書在內容的編排和組織上具有以下一些重要特點。
保持完整性和層次性
本書緊緊把握Android系統的4個層次,分章節介紹,並且有重點地介紹了Android整個系統的代碼結構、編譯系統、相關工具、各部分組織等全局性內容。這將讓讀者即使只花費較短的時間,也可以獲得對Android系統大致的感性理解。
提供清晰的框架
Android是一個有數百兆大小的較大系統,各部分之間是有機聯系的,這就要求Android的學習和開發者需要具有一些軟體架構方面的知識。本書為Android整體和重點模塊繪制了大量的框圖,這樣非常有利於幫助讀者直觀地理解系統。本書在講述每一個部分時,均列出相關代碼的路徑,幫助讀者對應著進行快速、高效地學習。
抓核心內容
Android系統已經發布了若干個版本:1.0、1.5(cupcake)、1.6(donut)和2.0(eclair),從開發的角度,各個版本在同時使用,這對於學習者是一個較大的挑戰。因此本書作者通過把握Android演進中脈絡,盡量總結出共性的內容展示給讀者。在某些部分,在講解代碼的同時,突出概念性的內容。本書力求通過一本教材,給讀者一個長期的、穩定的學習方法和思路。
開發細節
Android 包含眾多的軟體、程序和工具,涉及軟體開發各個方面。在實際的開發過程中,很多內容並不需要開發者去改動。本書從工程的角度出發,偏重開發中常用的內容,對於開發中較少涉及的部分,僅做精煉的大致介紹。本書重點介紹顯示機制、輸入機制、音頻/視頻系統的移植層、多媒體系統的構建、電話系統的構建、連接系統的構建、感測器的移值、應用開發中最常涉及的部分,在每段講解中,穿插了開發中可以使用的一些技巧。
本書內容
本書的各個章節及其組織方式如下所示。
第1章「Android系統概述」,概述Android系統方面的內容,包括智能手機平台的發展歷程、Android系統的特點、Android的3種開發工作,以及Android的2種不同的開發方式。
第2章「Android系統開發綜述」,介紹Android系統開發的綜述性內容,包括工具使用、獲得代碼、編譯系統、模擬器運行、SDK使用等。
第3章「Android的Linux內核與驅動程序」,介紹Android內核的特點、Android中使用的專用驅動程序、Android系統可能使用的標准設備驅動。
第4章「Android的底層庫和程序」,介紹Android系統的基礎程序,以本地程序為主。
第5章「Android的Java虛擬機和Java環境」,這是介於本地和Java層之間的相關內容,主要介紹Android的Java虛擬機Dalvik的基本概念、Android Java程序的環境、JNI的使用方法,以及Java框架的啟動流程等。
第6章「Android的GUI系統」,包括Android GUI系統架構、底層的pixelflinger和libui庫、Surface系統、Skia和2D圖形系統、Android的OpenGL和3D圖形系統等內容。
第7章「Android的Audio系統」,主要是音頻的輸入輸出環節,音頻系統從驅動程序、本地框架到Java框架都具有內容。
第8章「Android的Video輸入輸出系統」,介紹Android的Video輸入輸出系統,包括Overlay系統和Camera系統兩個部分,前者只有本地的內容,後者各個層次均有內容。
第9章「Android的多媒體系統」,介紹Android的多媒體系統的核心部分,包括Android中多媒體系統的業務、結構、多媒體系統的核心框架、OpenCore系統結構和使用等內容。
第10章「Android的電話部分」,介紹Android系統在電話方面的功能,Android是智能手機系統,電話是其核心部分。
第11章「Android的連接部分」,主要包括WiFi、藍牙及定位系統等,這些Android的連接部分也具有從驅動層到Java應用層的結構。
第12章「Android的感測器系統」,感測器系統涉及Android的各個層次,具有完整的結構,相比其他系統,感測器系統的各個層次都比較簡單。
第6~12章分模塊介紹Android的幾個核心系統,主要是本地框架和Java框架方面的內容,兼顧應用程序和驅動層,這是本書的重點。
第13章「Android應用程序概述及框架」,介紹Android應用程序層的基本概念和應用程序框架,這部分內容是Android自下而上的第4個層次,可以基於源代碼或者SDK開發,它們之間的差別非常小。
第14章「Android應用程序的主要方面」,介紹Android應用程序層開發的各個方面,基本上是橫向內容,包括應用程序的基本控制、各種UI元素的使用、圖形API使用3個方面的內容。
第15章「Android應用程序的設計思想」,本章的內容是基於通用的應用程序和GUI程序的通用設計思想,結合Android系統自身的特點,提出一些值得注意的問題和設計方法。
本書讀者
本書適應廣大的讀者群,力求在Android的系統移植、應用程序開發、系統框架改進方面給讀者全面的支持。不同的讀者在學習本書時,應該使用不同的方法。
Android初級開發者:在本書指引下閱讀代碼,搭建系統開發環境,對於Android應用程序的開發者,重點關注後3章的內容。
Android中、高級開發者:通過本書的引導,學習系統架構,關注開發要點,並盡量使用手機系統的通用設計思想、軟體工程思想、系統工程思想來指導Android系統學習。
嵌入式Linux系統學習者:將Android作為一個集Linux核心和應用層程序於一體的系統進行學習,並可以利用Android的模擬環境運行和調試程序。
讀者在學習本書的過程中,應盡量對照本書的框圖和手頭的Android源代碼,這樣可以達到事半功倍的效果。本書在重點代碼中加上大量的注釋,幫助讀者閱讀,對於非重點的代碼,不佔用本書的篇幅,讀者可以參考開放的源代碼。可以採用順序讀和重點讀相結合的方式學習本書,順序讀關注系統框架,重點讀關注開發要點。
本書作者
本書在編寫過程中提煉和綜合Android早期開發者的經驗、中國大陸Androidin社區的開發成果,以及各位專家的經驗和技術,這是本書出版的知識源泉。本書主要由Androidin社區的兩名核心技術專家韓超和梁泉領銜規劃和編著,韓超統稿。總部設在南加州、專注於Android平台並提供其移動應用開發及解決方案的邁奔無線(mAPPn Inc.)也投入技術和人力參與了本書的工作。
參與本書編寫的還有於仕林、張宇、張超等人,趙家維、黃亮、沈楨、徐威特、楊鈺等參與了審校工作。
由於時間倉促,可能依然存在一些錯誤和問題,請讀者見諒,歡迎讀者討論和指點。
『玖』 Android開發中的finish()與onDestroy()方法都是用來結束activity的吧兩個有什麼區別
Android開發中的finish()與onDestroy()方法都是用來結束activity的。
1、不同點區別:
finish()方法用於結束一個Activity的生命周期。而onDestory()方法則是Activity的一個生命周期。
其作用是在一個Activity對象被銷毀之前,Android系統會調用該方法,用於釋放此Activity之前所佔用的資源。finish會調用到onDestory方法。在onDestory里列印一句話,運行一下程序,會發現finish方法會把那句話列印出來。
2、方法區別:
Activity.finish()方法:
在你的activity動作完成的時候,或者Activity需要關閉的時候,調用此方法,當你調用此方法的時候,系統只是將最上面的Activity移出了棧,並沒有及時的調用onDestory()方法,其佔用的資源也沒有被及時釋放。因為移出了棧,所以當你點擊手機上邊的「back」 按鍵的時候,也不會再找到這個Activity.
Acitvity.onDestory()方法:
系統銷毀了這個Activity的實例在內存中占據的空間。在Activity的生命周期中,onDestory()方法是他聲明的最後一步,資源控制項等就被回收了。當重新進入此Activity的時候,必須重新創建,執行onCrate()方法。
(9)android編譯skia擴展閱讀
中介軟體
1、操作系統與應用程序的溝通橋梁,應用分為兩層:函數層(Library)和虛擬機(Virtual Machine)。 Bionic是 Android 改良libc的版本。Android 同時包含了Webkit,所謂的Webkit 就是Apple Safari 瀏覽器背後的引擎。Surface flinger 是就2D或3D的內容顯示到屏幕上。Android使用工具鏈(Toolchain)為Google自製的Bionic Libc。
2、Android採用OpenCORE作為基礎多媒體框架。Open CORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。
3、Android 使用skia 為核心圖形引擎,搭配OpenGL/ES。skia與Linux Cairo功能相當,但相較於Linux Cairo, skia 功能還只是雛形的。2005年Skia公司被Google收購,2007年初,Skia GL源碼被公開,Skia 也是Google Chrome 的圖形引擎。
4、Android的多媒體資料庫採用SQLite資料庫系統。資料庫又分為共用資料庫及私用資料庫。用戶可通過ContentResolver類(Column)取得共用資料庫。
5、Android的中間層多以Java 實現,並且採用特殊的Dalvik 虛擬機(Dalvik Virtual Machine)。Dalvik虛擬機是一種「暫存器型態」(Register Based)的Java虛擬機,變數皆存放於暫存器中,虛擬機的指令相對減少。
6、Dalvik虛擬機可以有多個實例(Instance), 每個Android應用程序都用一個自屬的Dalvik虛擬機來運行,讓系統在運行程序時可達到優化。Dalvik 虛擬機並非運行Java位元組碼(Bytecode),而是運行一種稱為.dex格式的文件。