㈠ 有誰知道android里的Path類中的quadTo()方法是怎麼實現貝塞爾曲線的嗎
/**
* 畫曲線(核心代碼)
*
* @param startp
* 開始點
* @param endp
* 結束點
* @param canvas
* 畫布
* @param paint
* 畫筆
*/
private void drawCurve(Point[] points, Canvas canvas, Paint paint)
{
Point startp = new Point();
Point endp = new Point();
for (int i = 0; i < points.length - 1; i++)
{
startp = points[i];
endp = points[i + 1];
int wt = (startp.x + endp.x) / 2;
Point p3 = new Point();
Point p4 = new Point();
p3.y = startp.y;
p3.x = wt;
p4.y = endp.y;
p4.x = wt;
// 確定曲線的路徑
path = new Path();
path.moveTo(startp.x, startp.y);
path.cubicTo(p3.x, p3.y, p4.x, p4.y, endp.x, endp.y);
canvas.drawPath(path, paint);
}
}
㈡ Adobe Flash Player 11的最新功能
通過Adobe®Flash®Player運行時交付極具吸引力的用戶體驗,支持本機64位操作系統和瀏覽器,加速圖形渲染、非同步點陣圖解碼、高解析度點陣圖支持等等。
本機64位支持
FlashPlayer現在可利用linux®、MacOS和Windows®上對64位操作系統和64位網頁瀏覽器的本地支持。
Stage3D加速圖形渲染*
探索Adobe高性能2D/3DGPU硬體加速圖形渲染的新架構,為應用程序高級渲染提供了低級Stage3DAPI,帶來互動體驗類的框架開發。
*個人計算機的初始支持。
滑鼠控制
針對新的內容類別製作身臨其境的全景游戲,其中包括需要利用無限滾動、滑鼠鎖定、相對坐標以及右鍵和中鍵事件的第一人稱視角游戲。
三次Bezier曲線
輕松創建復雜的三次Bezier曲線,無需通過cubicCurveTo繪制API自定義ActionScript®API。
增強的高解析度點陣圖支持
可以開發使用大量點陣圖的應用程序。BitmapData對象不再局限於16兆像素(16,777,215像素)的最高解析度,最大點陣圖的寬度/高度不再局限於8,191像素。
非同步點陣圖解碼
通過解碼初始載入而非點播載入的圖像,提高應用程序的響應,提供更流暢的動畫。圖像視需要緩存。
創造令人贊嘆的媒體體驗
藉助FlashPlayer的高級音頻和視頻功能創造令人贊嘆的媒體體驗。
相機的H.264/AVC軟體編碼
來自您的計算機攝像頭的美麗流媒體視頻,具有更高的壓縮效率和行業廣泛的支持,實現高品質的實時通信(例如,視頻聊天和視頻會議)和視頻直播節目。
受保護的HTTP動態流化(HDS)
跨設備保護流視頻,同時取消部署復雜的許可證伺服器。
多線程視頻解碼
提供流媒體和實時交互視頻,改進了播放性能並提高了Windows、MacOS和Linux系統上運行的高比特率內容的幀速率。
回聲消除(僅限桌面)
向游戲、企業和其他類型應用程序添加實時VoIP功能,而無需用戶佩戴降噪耳機。用戶可以使用台式機或攜帶型計算機內置的喇叭進行聊天。
高質量視頻編解碼器
通過漸進式下載、HTTP流或RTMP流,提供高達1080p的高清(HD)質量視頻,足以媲美當今最佳的視頻編解碼器,包括網路上最流行的視頻格式On2VP6、On2VP6-S和行業標准H.264。
Speex音頻編解碼器
充分利用高清晰、開放源代碼Speex語音編解碼器,它為語音編碼提供了等待時間較短的備選方案。FlashPlayer還支持ADPCM、HE-AAC、MP3和Nellymoser。
內容保護
回放使用FlashPlayer中的AdobeFlashAccess保護的媒體可支持各種業務模型,包括用於流化和下載的視頻點播、租賃和電子售出。
HTTP動態流化
使用標准HTTP基礎結構和SWF級回放組件,交付視頻點播和實時多位速率流化。交付直播和錄制媒體,包括對FlashAccess的HTTP流媒體視頻的全面內容保護。
電話的G.711音頻壓縮
通過FlashMediaGateway(FMG)和其他第三方客戶端(通過開放RTMP協議),支持與傳統電話系統的互操作性,而無需轉碼。
StageVideo硬體加速
在嵌入式和全屏模式下,享受網路上高清晰度H.264視頻的優美、流暢回放。AdobeFlashPlayer利用StageVideo硬體加速視頻管線,具備更高的幀速率和更低的功耗。
InternetExplorer9硬體加速渲染支持(僅限桌面)
充分利用InternetExplorer9中的硬體加速圖形,藉助硬體渲染表面提高圖形性能並實現無縫合成。
H.264視頻硬體解碼
跨支持的設備以最低的開銷交付順暢的高品質視頻。硬體解碼卸載CPU任務、改進視頻回放、降低系統資源的使用、維持電池壽命。
快速切換
藉助根據不斷變化的網路條件自動調整的流顯示出眾的視頻效果。FlashPlayer經過增強,縮短了位速率之間的切換時間。
AdobeFlashAccess®
利用關鍵旋轉支持、V3許可證鏈接、域名支持、增強輸出保護以及設備過濾功能。
流重新連接
即使連接中斷時,也可以通過緩沖區播放RTMP流。在ActionScript中加入重新連接邏輯,重新建立伺服器連接並在不中斷視頻的情況下繼續流化。 延伸FlashPlayer的運行時功能,在瀏覽器中實現前所未有的用戶體驗。
圖形多核支持
藉助利用最多四個CPU的多核支持加快矢量、點陣圖、濾鏡和視頻呈現,其中包括真正的1080p視頻。
矢量數據類型
使用類型化數組類實現更高的數據性能、效率和錯誤檢查效果。
ActionScript3.0
實現卓越的性能,通過:復雜的應用程序;大型數據集;基於ECMAScript標准(ECMA-262)的ActionScript3.0面向對象的可重用代碼庫。
全局錯誤處理
編寫一個處理程序就可以處理之前不屬於try/catch語句的所有運行時錯誤。通過捕捉和處理意外運行時錯誤和顯示自定義錯誤消息,改善應用程序可靠性和用戶體驗。
麥克風訪問(僅限桌面)
訪問來自麥克風的實時和連續波形的二進制數據,以創建新類型的音頻應用程序。
動態生成聲音
使用增強的聲音API生成音頻並創建新的音頻應用程序類型,如混音器和音序器、游戲實時音頻、甚至音頻觀測儀。實時處理、過濾和混合音頻。
繪制API
藉助可重新設置樣式的屬性、3DAPI以及無需逐行編碼即可繪制復雜形狀的新方式,更輕松地完成運行時繪制。
文本引擎
使用新的、極其靈活的文本布局引擎創建新穎的文本控制,該引擎與TextField並存,後者提供對文本布局和交互API的低級訪問,用於創建組件級文本對象。
二進制文件支持
藉助對二進制數據的直接位元組訪問,增強您的網路應用程序。通過為新的文件和數據類型添加支持等新方式控制和訪問數據,或實時處理聲音數據以創建新的聲音效果。
緩沖的流追趕
處理點陣圖、將矢量數據復制到點陣圖中以及在運行時使用點陣圖效果。
上下文菜單
通過對常見文本欄位上下文菜單項使用支持純文本和富文本的ActionScriptAPI,控制上下文菜單中可以顯示的內容。剪貼板菜單以安全、受控方式提供對剪貼板的訪問。
音頻硬體解碼
藉助硬體加快音頻解碼、避免CPU密集型分析和解壓縮,從而降低了移動設備的CPU負載和延長電池壽命。
硬體加速
利用圖形卡的硬體處理能力將SWF文件繪制到瀏覽器中並加快點陣圖、濾鏡、混合模式和視頻疊加的合成計算,與軟體處理相比速度更快。
全屏、硬體加速模式
為用戶提供硬體加速、多核增強、全屏視頻回放功能,實現跨主要操作系統和瀏覽器的高解析度觀看。
圖形呈現
在運行時享受快速、高質量的按比例圖像縮減。通過點陣圖緩存減少矢量和圖形呈現,提高性能。.
消除鋸齒引擎(Saffron3.1)
藉助增強的Saffron和消除鋸齒引擎,享受消除鋸齒後更高的文本性能和質量,對於亞洲字元呈現尤為明顯。筆觸字體支持降低了內存要求。
ActionScriptVirtualMachine2
充分利用ActionScript3.0以及為富Internet應用程序優化的AVM2。AVM2包含一個JIT編譯器,它可以將ActionScript位元組代碼轉換為本機代碼,從而實現最高執行速度。
優化的SWF管理(僅限移動)
優化移動CPU和內存限制的SWF載入和回放,以提供更好的用戶體驗。不查看時會自動暫停SWF回放,從而降低CPU、電池和內存使用。
睡眠模式(僅限移動)
通過在移動設備轉入屏幕保護程序或類似模式時減慢FlashPlayer定時器,降低移動設備上的CPU和電池消耗,並且不中斷音頻/視頻回放。來電使FlashPlayer暫停。
FlashPlayer高速緩存
使用開放源代碼Flex框架等公用平台組件構建應用程序,縮小SWF文件大小並縮短應用程序下載時間。FlashPlayer可以將公用組件放入本地高速緩存,然後供任何域的SWF文件使用。
周期定時器
通過消除對不同瀏覽器定時器實時的依賴性,實現一致的跨平台行為,降低CPU使用並延長電池壽命。以任意幀速率回放視頻,增加回放保真度。
輕量級應用程序大小
輕量級、二進制SWF文件格式使您能以較小的文件提供引人入勝的內容。
漸進式應用程序載入
縮短啟動時間,實現快速的用戶體驗。FlashPlayer在下載時執行SWF內容。
硬體加速視頻演示
在嵌入式和全屏模式下,享受網路上高清晰度H.264視頻的優美、流暢回放。AdobeFlashPlayer利用StageVideo硬體加速視頻管線,具備更高的幀速率和更低的功耗。 降低跨不同設備、軟體、網路和用戶環境創建、測試和部署內容的成本,最終提高經營業績。
跨平台和瀏覽器一致性
創建能以一致、可靠、向後兼容並且安全的方式訪問的內容,並且可以跨主要操作系統和瀏覽器訪問它們。通過重用代碼、資源、框架、工具和服務,為桌面和移動平台創建應用程序、內容和視頻。
快速採用
使用最新功能設計內容,並在幾個月內瞄準主體用戶。快速採用FlashPlayer的新發行版使開發人員能藉助尖端技術獲得更多用戶。
安裝簡單
為用戶提供了順暢的上下文升級體驗。FlashPlayer包含快速安裝和自動更新通知功能,實現FlashPlayer新發行版的快速採用,開發人員可以自信鎖定這樣的目標。
FlashPlayer後台更新
藉助此次針對Windows系統進行了功能增強的更新機制,現在可以向終端用戶更有效率地提供新版本的運行時。 利用Android™、BlackBerry®Tablet和iOS操作系統的本機文本輸入控制項,開發移動應用程序。
移動平台支持
向移動設備提供內容。目標移動操作系統包括Android和BlackberryTabletOS。合作夥伴可以獲得一個移植工具包和基於Linux®的參考實施,用於將FlashPlayer移植到其他平台。
StageVideo硬體加速
在嵌入式和全屏模式下,享受網路上高清晰度H.264視頻的優美、流暢回放。AdobeFlashPlayer利用StageVideo硬體加速視頻管線,具備更高的幀速率和更低的功耗。
移動文本輸入
如果未檢測到物理鍵盤,可以藉助TextField支持使用本機設備虛擬鍵盤輸入文本。在移動設備上編輯文本時,會自動升起和降下一個虛擬鍵盤,從而實現無阻、直觀的文本編輯。
多觸和手勢
藉助面向多觸和本機手勢事件的全新ActionScript3.0API,充分利用最新的硬體和操作系統用戶交互功能。為廣泛的設備創建多觸感知內容。
加速計輸入
將加速計輸入用於用戶輸入控制以及控制屏幕方向。從本機設備加速計感測器讀取x、y、z軸的加速值,指定計算機的更新速度以節省電池壽命。
H.264視頻硬體解碼
跨支持的設備以最低的開銷交付順暢的高品質視頻。硬體解碼卸載CPU任務、改進視頻回放、降低系統資源的使用、維持電池壽命。
音頻硬體解碼
藉助硬體加快音頻解碼、避免CPU密集型分析和解壓縮,從而降低了移動設備的CPU負載和延長電池壽命。
優化的SWF管理(僅限移動)
優化移動CPU和內存限制的SWF載入和回放,以提供更好的用戶體驗。不查看時會自動暫停SWF回放,從而降低CPU、電池和內存使用。
睡眠模式(僅限移動)
通過在移動設備轉入屏幕保護程序或類似模式時減慢FlashPlayer定時器,降低移動設備上的CPU和電池消耗,並且不中斷音頻/視頻回放。來電使FlashPlayer暫停。
硬體加速視頻演示
在嵌入式和全屏模式下,享受網路上高清晰度H.264視頻的優美、流暢回放。AdobeFlashPlayer利用StageVideo硬體加速視頻管線,具備更高的幀速率和更低的功耗。
本機文本輸入UI(移動)
移動應用程序現在可以利用Android、BlackBerryTablet和iOS操作系統上的本機文本輸入控制項,包括特定平台的用戶交互行為,例如放大倍率和文本選擇。
與Android瀏覽器渲染引擎更進一步的集成(需要Android3.0.1或更高版本)
由於FlashPlayer與增強的Android3.0瀏覽器進一步集成,您可以充分利用豐富的互動式網路內容更快、更好的渲染實現更順暢、響應更快的瀏覽體驗。
智能手機
您可以感受到為充分利用新款智能手機和Tablet中的下一代處理器而度身定製的性能提升。FlashPlayer以智能方式利用多核和GPU技術流暢地交付FLV文件。
自動軟鍵盤支持
在與豐富內容交互、需要鍵盤輸入的觸摸屏設備上享受更出眾的體驗。簡化需要鍵盤輸入的應用程序開發,使其易於優化移動設備的桌面應用程序。
移動文本輸入
如果未檢測到物理鍵盤,可以藉助TextField支持使用本機設備虛擬鍵盤輸入文本。在移動設備上編輯文本時,會自動升起和降下一個虛擬鍵盤,從而實現無阻、直觀的文本編輯。
多觸和手勢
藉助面向多觸和本機手勢事件的全新ActionScript3.0API,充分利用最新的硬體和操作系統用戶交互功能。為廣泛的設備創建多觸感知內容。 通過本機javaScript對象表示法(JSON)、套接字進度事件、JPEG-XR支持、增強SWF壓縮、垃圾收集API和刪除容器的子組件,提高您的開發馬力。
本機JSON(JavaScript對象表示法)
ActionScript開發人員現在可以利用高性能本地解析和生成JSON格式數據。開發人員可以將現有數據無縫集成到他們的項目中。
垃圾收集通知
GC通知API對垃圾收集進度提供了額外的控制,使垃圾收集過程不會破壞用戶體驗。
JPEG-XR支持
支持JPEG-XR高級圖像壓縮標准(國際標准ISO/IEC29199-2),具備比JPEG更高效的壓縮,同時支持有損和無損壓縮,並增加對alpha通道透明度的支持。
高效率SWF壓縮支持
利用LZMA壓縮減少SWF文件大小高達40%,通過縮短下載時間和減少帶寬消耗,使用戶能夠從更豐富的體驗中受益。
新的removeChildrenAPI
DisplayObjectContainer現在實施了removeChildrenAPI,使開發人員能夠運用單一API調用,快速刪除容器的所有子對象。
新的MovieClip屬性
利用新的MovieClip.isPlaying特性,返回MovieClip的當前播放狀態。
套接字進度事件
通過確定寫入緩沖區剩餘位元組數的新特性以及數據發送至網路層的新事件,改進數據傳輸管理。新的API允許應用程序輕松跟蹤進展情況並提供反饋。 通過FlashPlayer中的本機設備功能實現高度創新的電影體驗來吸引用戶。
3D效果
從2D開始,然後將您的動畫轉換為3D。AdobeFlashProfessional軟體簡單易用的API和3D工具實現動態動畫,原先只是有經驗的ActionScript®用戶或自定義第三方庫才能實現。
MacOS自動更新通知
添加實時動態效果,如模糊、投影、發光、斜角、漸變發光等。使用混合模式、徑向漸變以及與通過PixelBender技術創建的自定濾鏡和效果結合的筆觸增加創作選項。
自定義濾鏡和效果
創建電影體驗實時效果。藉助PixelBender,效果既可用於AdobeAfterEffects®CS5軟體的作品製作,也可以與FlashPlayer一起實時使用。將獨特的濾鏡、效果和混合模式應用於所有顯示對象。
子像素文本渲染
FlashPlayer中的文本可讀性得到改進,尤其對於基於復雜字元的語言。
高級文本支持
充分利用靈活的文本引擎,它為網路帶來了印刷級出版。藉助開放源代碼文本布局框架獲得對文本布局更高的控制力,這是一個用於創建多語言網路應用程序的可擴展庫。
移動文本輸入
如果未檢測到物理鍵盤,可以藉助TextField支持使用本機設備虛擬鍵盤輸入文本。在移動設備上編輯文本時,會自動升起和降下一個虛擬鍵盤,從而實現無阻、直觀的文本編輯。
本機自定義滑鼠游標
定義自定義本機滑鼠游標,從而增強用戶體驗和提高性能。
多觸和手勢
藉助面向多觸和本機手勢事件的全新ActionScript3.0API,充分利用最新的硬體和操作系統用戶交互功能。為廣泛的設備創建多觸感知內容。
加速計輸入
將加速計輸入用於用戶輸入控制以及控制屏幕方向。從本機設備加速計感測器讀取x、y、z軸的加速值,指定計算機的更新速度以節省電池壽命。
動畫與合成
藉助Alpha通道、蒙版和圖層支持等動畫及合成功能為設計注入活力。創建與圖像及視頻集成、令人贊嘆的動態圖形。
圖像導入
動態導入GIF、漸進JPEG和PNG文件。
顏色校正
交付顏色准確的網路應用程序,令喜愛的網路目標外觀如您所願。顏色校正可以與顯示器的ICC顏色配置文件配合,允許您將SWF文件轉換為標准RGB。
3D效果
可處理高達16,777,216像素(4096x4096)的大型點陣圖,每側最大長度可達8191像素。 利用新的隱私功能為用戶提供更多的安全性和存儲控制,帶來更加透明和可信的體驗。
安全隨機數生成器
開發人員現在可以利用加密安全隨機數生成來構建更安全的演算法和協議。
TLS安全套接字支持
利用客戶端/伺服器應用程序對安全通信的全新支持。
簡化本地存儲管理
以簡單與集成的方式進一步控制用戶隱私,通過瀏覽器隱私設置界面清除本地存儲,就像現在用戶清除他們的瀏覽器cookie一樣。
本地設置管理器
藉助簡化的控制更輕松地管理FlashPlayer隱私、安全性和存儲設置。用戶可以從Windows®、Mac和Linux®計算機的控制面板或系統首選項直接訪問FlashPlayer設置管理器。
MacOS自動更新通知
由於MacOS上支持軟體更新自動通知,您可以更輕松地隨時使用最新的新增功能。 創建各種應用程序,它們與瀏覽器密切集成、充分利用本地系統資源並為用戶提供了更安全的體驗。
非同步點陣圖解碼
通過解碼初始載入而非點播載入的圖像,提高應用程序的響應,提供更流暢的動畫。圖像視需要緩存。
二進制套接字
充分利用與現有自定協議的互操作性,藉助緊湊的數據表示法提高數據傳輸性能。
共享對象
在本地計算機或伺服器上的SWF文件之間實時共享數據。
二進制數據訪問
藉助開放、緊湊的ActionMessageFormat(AMF)交換二進制數據。通過ActionScript對象序列化,保持和檢索 應用程序狀態。
本地連接
在同一客戶端上運行的應用程序之間傳輸和共享數據。
全球化支持
使用操作系統區域設置首選項或與當前選定區域設置無關的特定格式處理文本和列表,並根據位置環境顯示信息。
文件上載和下載API
允許用戶從您的網路應用程序上載並保存文件,為他們帶來真實體驗。新的文件參考運行時訪問無需往返伺服器,即可實現本地數據處理。
輸入法編輯器
通過從您的應用程序中訪問操作系統IME,實現本地化輸入。
讀/寫剪貼板訪問
允許用戶通過剪貼板菜單以安全、受控的方式訪問剪貼板,以便您編寫用於粘貼文本的處理函數。
瀏覽器專用模式(僅限桌面)
使用主機瀏覽器的「專用瀏覽」模式,因此不會在本地保留本地數據和瀏覽活動,為SWF和HTML內容提供了一致的專用瀏覽機制。在Firefox、Chrome和InternetExplorer中受支持。
內存不足管理
當SWF文件嘗試分配的內存超出設備上的可用內存時,通過關閉相應實例,自動防止內存不足瀏覽器崩潰。
外部API
通過外部FlashPlayerAPI與基於HTML、DHTML和Ajax的網路應用程序集成。
提供一致的網路體驗
Adobe致力於通過採用開放技術推動創新,提供一致、與眾不同的網路體驗。
開放規范
創建產品和技術,它們實施了SWF、FLV/F4V、RTMP和AMF規范。Adobe使開發人員能輕松訪問這些規范。
開放源代碼支持
利用Adobe對開源活動的支持,包括Tamarin開源項目的ActionScript虛擬機,提供一個開源Flex框架,並支持Linux版FlashPlayer。
公共缺陷庫
通過FlashPlayer公共缺陷和問題管理系統請求新功能、報告缺陷、為缺陷投票和追蹤狀態。
SWF搜索
依賴於動態網路內容和RIA大幅改善的搜索結果。Adobe通過向主要合作夥伴提供經過優化的FlashPlayer技術,與搜索行業的領先公司合作。
OpenScreenProject
充分利用OpenScreenProject™,這是一個行業聯合的項目,旨在幫助用戶跨多個屏幕順暢訪問和共享豐富的內容,而無論所使用的設備、操作系統、瀏覽器或網路。
㈢ android 怎麼編譯so文件
android NDK編譯多個so文件
android編譯系統的makefile文件Android.mk寫法如下
(1)Android.mk文件首先需要指定LOCAL_PATH變數,用於查找源文件。由於一般情況下
Android.mk和需要編譯的源文件在同一目錄下,所以定義成如下形式:
LOCAL_PATH:=$(call my-dir)
上面的語句的意思是將LOCAL_PATH變數定義成本文件所在目錄路徑。
(2)Android.mk中可以定義多個編譯模塊,每個編譯模塊都是以include $(CLEAR_VARS)開始
以include $(BUILD_XXX)結束。
include $(CLEAR_VARS)
CLEAR_VARS由編譯系統提供,指定讓GNU MAKEFILE為你清除除LOCAL_PATH以外的所有LOCAL_XXX變數,
如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。
include $(BUILD_STATIC_LIBRARY)表示編譯成靜態庫
include $(BUILD_SHARED_LIBRARY)表示編譯成動態庫。
include $(BUILD_EXECUTABLE)表示編譯成可執行程序
(3)舉例如下(frameworks/base/libs/audioflinger/Android.mk):
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS) 模塊一
ifeq ($(AUDIO_POLICY_TEST),true)
ENABLE_AUDIO_DUMP := true
endif
LOCAL_SRC_FILES:= \
AudioHardwareGeneric.cpp \
AudioHardwareStub.cpp \
AudioHardwareInterface.cpp
ifeq ($(ENABLE_AUDIO_DUMP),true)
LOCAL_SRC_FILES += AudioDumpInterface.cpp
LOCAL_CFLAGS += -DENABLE_AUDIO_DUMP
endif
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
libmedia \
libhardware_legacy
ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)
LOCAL_CFLAGS += -DGENERIC_AUDIO
endif
LOCAL_MODULE:= libaudiointerface
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
LOCAL_SRC_FILES += A2dpAudioInterface.cpp
LOCAL_SHARED_LIBRARIES += liba2dp
LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP
LOCAL_C_INCLUDES += $(call include-path-for, bluez)
endif
include $(BUILD_STATIC_LIBRARY) 模塊一編譯成靜態庫
include $(CLEAR_VARS) 模塊二
LOCAL_SRC_FILES:= \
AudioPolicyManagerBase.cpp
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libmedia
ifeq ($(TARGET_SIMULATOR),true)
LOCAL_LDLIBS += -ldl
else
LOCAL_SHARED_LIBRARIES += libdl
endif
LOCAL_MODULE:= libaudiopolicybase
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
LOCAL_CFLAGS += -DWITH_A2DP
endif
ifeq ($(AUDIO_POLICY_TEST),true)
LOCAL_CFLAGS += -DAUDIO_POLICY_TEST
endif
include $(BUILD_STATIC_LIBRARY) 模塊二編譯成靜態庫
include $(CLEAR_VARS) 模塊三
LOCAL_SRC_FILES:= \
AudioFlinger.cpp \
AudioMixer.cpp.arm \
AudioResampler.cpp.arm \
AudioResamplerSinc.cpp.arm \
AudioResamplerCubic.cpp.arm \
AudioPolicyService.cpp
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
libmedia \
libhardware_legacy
ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)
LOCAL_STATIC_LIBRARIES += libaudiointerface libaudiopolicybase
LOCAL_CFLAGS += -DGENERIC_AUDIO
else
LOCAL_SHARED_LIBRARIES += libaudio libaudiopolicy
endif
ifeq ($(TARGET_SIMULATOR),true)
LOCAL_LDLIBS += -ldl
else
LOCAL_SHARED_LIBRARIES += libdl
endif
LOCAL_MODULE:= libaudioflinger
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP
LOCAL_SHARED_LIBRARIES += liba2dp
endif
ifeq ($(AUDIO_POLICY_TEST),true)
LOCAL_CFLAGS += -DAUDIO_POLICY_TEST
endif
ifeq ($(TARGET_SIMULATOR),true)
ifeq ($(HOST_OS),linux)
LOCAL_LDLIBS += -lrt -lpthread
endif
endif
ifeq ($(BOARD_USE_LVMX),true)
LOCAL_CFLAGS += -DLVMX
LOCAL_C_INCLUDES += vendor/nxp
LOCAL_STATIC_LIBRARIES += liblifevibes
LOCAL_SHARED_LIBRARIES += liblvmxservice
# LOCAL_SHARED_LIBRARIES += liblvmxipc
endif
include $(BUILD_SHARED_LIBRARY) 模塊三編譯成動態庫
(4)編譯一個應用程序(APK)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory-->直譯(建立在java子目錄中的所有Java文件)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build-->直譯(創建APK的名稱)
LOCAL_PACKAGE_NAME := LocalPackage
# Tell it to build an APK-->直譯(告訴它來建立一個APK)
include $(BUILD_PACKAGE)
(5)編譯一個依賴於靜態Java庫(static.jar)的應用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# List of static libraries to include in the package
LOCAL_STATIC_JAVA_LIBRARIES := static-library
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
# Tell it to build an APK
include $(BUILD_PACKAGE)
(6)編譯一個需要用平台的key簽名的應用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
LOCAL_CERTIFICATE := platform
# Tell it to build an APK
include $(BUILD_PACKAGE)
(7)編譯一個需要用特定key前面的應用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
LOCAL_CERTIFICATE := vendor/example/certs/app
# Tell it to build an APK
include $(BUILD_PACKAGE)
(8)添加一個預編譯應用程序
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Mole name should match apk name to be installed.
LOCAL_MODULE := LocalMoleName
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)
(9)添加一個靜態JAVA庫
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Any libraries that this library depends on
LOCAL_JAVA_LIBRARIES := android.test.runner
# The name of the jar file to create
LOCAL_MODULE := sample
# Build a static jar file.
include $(BUILD_STATIC_JAVA_LIBRARY)
(10)Android.mk的編譯模塊中間可以定義相關的編譯內容,也就是指定相關的變數如下:
LOCAL_AAPT_FLAGS
LOCAL_ACP_UNAVAILABLE
LOCAL_ADDITIONAL_JAVA_DIR
LOCAL_AIDL_INCLUDES
LOCAL_ALLOW_UNDEFINED_SYMBOLS
LOCAL_ARM_MODE
LOCAL_ASFLAGS
LOCAL_ASSET_DIR
LOCAL_ASSET_FILES 在Android.mk文件中編譯應用程序(BUILD_PACKAGE)時設置此變數,表示資源文件,
通常會定義成LOCAL_ASSET_FILES += $(call find-subdir-assets)
LOCAL_BUILT_MODULE_STEM
LOCAL_C_INCLUDES 額外的C/C++編譯頭文件路徑,用LOCAL_PATH表示本文件所在目錄
舉例如下:
LOCAL_C_INCLUDES += extlibs/zlib-1.2.3
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src
LOCAL_CC 指定C編譯器
LOCAL_CERTIFICATE 簽名認證
LOCAL_CFLAGS 為C/C++編譯器定義額外的標志(如宏定義),舉例:LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1
LOCAL_CLASSPATH
LOCAL_COMPRESS_MODULE_SYMBOLS
LOCAL_COPY_HEADERS install應用程序時需要復制的頭文件,必須同時定義LOCAL_COPY_HEADERS_TO
LOCAL_COPY_HEADERS_TO install應用程序時復制頭文件的目的路徑
LOCAL_CPP_EXTENSION 如果你的C++文件不是以cpp為文件後綴,你可以通過LOCAL_CPP_EXTENSION指定C++文件後綴名
如:LOCAL_CPP_EXTENSION := .cc
注意統一模塊中C++文件後綴必須保持一致。
LOCAL_CPPFLAGS 傳遞額外的標志給C++編譯器,如:LOCAL_CPPFLAGS += -ffriend-injection
LOCAL_CXX 指定C++編譯器
LOCAL_DX_FLAGS
LOCAL_EXPORT_PACKAGE_RESOURCES
LOCAL_FORCE_STATIC_EXECUTABLE 如果編譯的可執行程序要進行靜態鏈接(執行時不依賴於任何動態庫),則設置LOCAL_FORCE_STATIC_EXECUTABLE:=true
目前只有libc有靜態庫形式,這個只有文件系統中/sbin目錄下的應用程序會用到,這個目錄下的應用程序在運行時通常
文件系統的其它部分還沒有載入,所以必須進行靜態鏈接。
LOCAL_GENERATED_SOURCES
LOCAL_INSTRUMENTATION_FOR
LOCAL_INSTRUMENTATION_FOR_PACKAGE_NAME
LOCAL_INTERMEDIATE_SOURCES
LOCAL_INTERMEDIATE_TARGETS
LOCAL_IS_HOST_MODULE
LOCAL_JAR_MANIFEST
LOCAL_JARJAR_RULES
LOCAL_JAVA_LIBRARIES 編譯java應用程序和庫的時候指定包含的java類庫,目前有core和framework兩種
多數情況下定義成:LOCAL_JAVA_LIBRARIES := core framework
注意LOCAL_JAVA_LIBRARIES不是必須的,而且編譯APK時不允許定義(系統會自動添加)
LOCAL_JAVA_RESOURCE_DIRS
LOCAL_JAVA_RESOURCE_FILES
LOCAL_JNI_SHARED_LIBRARIES
LOCAL_LDFLAGS 傳遞額外的參數給連接器(務必注意參數的順序)
LOCAL_LDLIBS 為可執行程序或者庫的編譯指定額外的庫,指定庫以"-lxxx"格式,舉例:
LOCAL_LDLIBS += -lcurses -lpthread
LOCAL_LDLIBS += -Wl,-z,origin
LOCAL_MODULE 生成的模塊的名稱(注意應用程序名稱用LOCAL_PACKAGE_NAME而不是LOCAL_MODULE)
LOCAL_MODULE_PATH 生成模塊的路徑
LOCAL_MODULE_STEM
LOCAL_MODULE_TAGS 生成模塊的標記
LOCAL_NO_DEFAULT_COMPILER_FLAGS
LOCAL_NO_EMMA_COMPILE
LOCAL_NO_EMMA_INSTRUMENT
LOCAL_NO_STANDARD_LIBRARIES
LOCAL_OVERRIDES_PACKAGES
LOCAL_PACKAGE_NAME APK應用程序的名稱
LOCAL_POST_PROCESS_COMMAND
LOCAL_PREBUILT_EXECUTABLES 預編譯including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)時所用,指定需要復制的可執行文件
LOCAL_PREBUILT_JAVA_LIBRARIES
LOCAL_PREBUILT_LIBS 預編譯including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)時所用, 指定需要復制的庫.
LOCAL_PREBUILT_OBJ_FILES
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES
LOCAL_PRELINK_MODULE 是否需要預連接處理(默認需要,用來做動態庫優化)
LOCAL_REQUIRED_MODULES 指定模塊運行所依賴的模塊(模塊安裝時將會同步安裝它所依賴的模塊)
LOCAL_RESOURCE_DIR
LOCAL_SDK_VERSION
LOCAL_SHARED_LIBRARIES 可鏈接動態庫
LOCAL_SRC_FILES 編譯源文件
LOCAL_STATIC_JAVA_LIBRARIES
LOCAL_STATIC_LIBRARIES 可鏈接靜態庫
LOCAL_UNINSTALLABLE_MODULE
LOCAL_UNSTRIPPED_PATH
LOCAL_WHOLE_STATIC_LIBRARIES 指定模塊所需要載入的完整靜態庫(這些精通庫在鏈接是不允許鏈接器刪除其中無用的代碼)
LOCAL_YACCFLAGS
OVERRIDE_BUILT_MODULE_PATH
㈣ 如何在android畫分析圖(例如 柱狀圖、趨勢圖、餅圖)
目前android上圖標引擎並不少見,像aChartEngine就能很好的完成繪圖:
aChartEngine支持:1、linechart(折線圖)2、areachart(面積圖;分區圖,對比圖)3、scatterchart(散點圖)4、timechart(時間圖;進度表)5、barchart(條形圖;柱狀圖)6、piechart(餅圖)7、bubblechart(氣泡圖)8、doughnutchart(圓環圖)9、range(high-low)barchart(范圍條形圖)10、dialchart/gauge(撥號盤/壓力表)11、combined(anycombinationofline,cubicline,scatter,bar,rangebar,bubble)chart(組合圖)12、cubiclinechart(立方折線圖)
上述所有支持的圖表類型,都可以包含多個系列,都支持水平(默認)或垂直方式展示圖表,並且支持許多其他的自定義功能。所有圖表都可以建立為一個view,也可以建立為一個用於啟動activity的intent.
下面是一個餅狀圖的源碼事例:
package org.achartengine.chartdemo.demo.chart;
import org.achartengine.ChartFactory;
import org.achartengine.renderer.DefaultRenderer;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
public class BudgetPieChart extends AbstractDemoChart {
public String getName() {
return "Budget chart";
}
public String getDesc() {
return "The budget per project for this year (pie chart)";
}
public Intent execute(Context context) {
double[] values = new double[] { 12, 14, 11, 10, 19 };//餅圖分層5塊,每塊代表的數值
int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.MAGENTA, Color.YELLOW, Color.CYAN };//每塊餅圖的顏色
DefaultRenderer renderer = buildCategoryRenderer(colors);
renderer.setZoomButtonsVisible(true);//設置顯示放大縮小按鈕
renderer.setZoomEnabled(true);//設置允許放大縮小.
renderer.setChartTitleTextSize(20);//設置圖表標題的文字大小
return ChartFactory.getPieChartIntent(context, buildCategoryDataset("Project budget", values),
renderer, "Budget");//構建Intent, buildCategoryDataset是調用AbstraDemoChart的構建方法.
}
}