第一篇:Android安全性問題總結(jié)
Android開發(fā)安全性注意事項(xiàng): 本地?cái)?shù)據(jù)庫(kù)加密機(jī)制
本地SharedPreferences保存信息要加密
統(tǒng)一日志輸出開關(guān)控制(開發(fā)測(cè)試日志輸出打開,版本正式上線日志輸入關(guān)閉)正式包需要混淆打包
app與服務(wù)器交互接口參數(shù)以及返回?cái)?shù)據(jù)需要進(jìn)行數(shù)據(jù)加密 app與服務(wù)器交互接口需要有token過期失效機(jī)制 聲明適當(dāng)?shù)膍anifest權(quán)限
關(guān)于Android組件暴露的問題可以在不需要暴露的組件在AndroidManifest.xml中為這個(gè)組件加上屬性android:exported=”false”
第二篇:Android總結(jié)
Android四大組件:
Activity—表現(xiàn)屏幕界面
Service—后臺(tái)服務(wù)
BroadcastReceiver—實(shí)現(xiàn)廣播機(jī)制
ContentProvider—實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)
Intent類:用來啟動(dòng)程序并傳遞信息的類
用于Activity、Receiver、Service之間進(jìn)行交互的類,通過無參構(gòu)造方法創(chuàng)建對(duì)象,增加其action、category、data、extra等屬性進(jìn)行信息傳遞,并通過Activity中的startActivity(Intent intent)進(jìn)行界面的跳轉(zhuǎn);通過Context中的StartService(Intent intent)進(jìn)行服務(wù)跳轉(zhuǎn);通過Context中的registerReceive(Intent intent)對(duì)廣播進(jìn)行注冊(cè),并通過sendBroadcast()進(jìn)行無序消息發(fā)送,或可以通過SendOrderedBroadcast()進(jìn)行有序的消息發(fā)送。Handler類:
用來發(fā)送和處理消息,并配合主線程完成UI的更新;消息Message/Runnable傳遞通過MessageQueue(消息隊(duì)列,先進(jìn)先出)進(jìn)行傳遞,并通過Lopper進(jìn)行接收,傳遞的消息可以為Message對(duì)象,也可以是Runnable對(duì)象;接收方法通過HandleMessage(Message msg)進(jìn)行獲取。SharedPreferences類:
一般用于第一次登錄時(shí)的設(shè)置,或者是各個(gè)界面的一些小型格式設(shè)置,如字體等。是本地的小型共享數(shù)據(jù)庫(kù),可以通過Context的靜態(tài)方法getSharedPreferences獲得其對(duì)象,對(duì)象內(nèi)的值均為鍵值對(duì)進(jìn)行儲(chǔ)存。通過SharedPreferences對(duì)象調(diào)用editor()獲取SharedPreferences.Editor對(duì)象,向共享數(shù)據(jù)庫(kù)中增加數(shù)據(jù),putString(),并提交數(shù)據(jù),commit();通過SharedPreferences對(duì)象獲取共享數(shù)據(jù)庫(kù)中的數(shù)據(jù),getString()。
ViewPager:實(shí)現(xiàn)界面滑動(dòng)的類;
通過設(shè)置OnPagerChangedListener設(shè)置ViewPager的監(jiān)聽事件;
實(shí)現(xiàn)流程:
①布局文件中設(shè)置ViewPager控件;
②代碼中進(jìn)行綁定控件;
③通過繼承PagerAdapter抽象類進(jìn)行設(shè)置適配器,并傳遞數(shù)據(jù)源;
④適配器中實(shí)現(xiàn)兩個(gè)抽象方法,兩個(gè)重寫方法:getCount()—獲取滑動(dòng)界面的數(shù)量,isViewFromObject()—判斷視圖是否是來自于Object文件中;重寫兩個(gè)方法,分別為destoryItem—銷毀指定位置的視圖;InstantiateItem(),設(shè)置指定位置的視圖;
Timer與TimerTask類:
Timer為計(jì)時(shí)器的類,通過無參構(gòu)造方法可以獲取對(duì)象,通過Timer.schedule(TimerTask task,long time)進(jìn)行設(shè)置多久后執(zhí)行某任務(wù),當(dāng)任務(wù)執(zhí)行完后,取消計(jì)時(shí)的功能,Timer.cancle();TimerTask類為抽象類,實(shí)例化時(shí),必須重寫run方法;執(zhí)行的內(nèi)容,均在run方法中進(jìn)行設(shè)置,并且執(zhí)行時(shí),已在子線程中進(jìn)行執(zhí)行。自定義View:用到的類有Paint、Canvas、Spec、SpecF、Path、View.MeasureSpec、Timer、TimerTask;
抽象類,通過子類繼承,獲取對(duì)象;在布局文件中綁定后,通過代碼,設(shè)置自定義View的屬性;自定義View中,通過重寫OnMeasure方法,對(duì)布局文件中的尺寸進(jìn)行測(cè)量,并由View中的setMeasureDimenson()方法,進(jìn)行數(shù)據(jù)的保存;通過重寫Ondraw方法,進(jìn)行繪圖;當(dāng)需要繪制動(dòng)態(tài)圖形時(shí),使用計(jì)時(shí)器Timer的schedule(TimerTask,long time,delay time2)方法,在time時(shí)間后,每隔time2時(shí)間,重寫執(zhí)行run方法中的內(nèi)容;將耗時(shí)的操作設(shè)置在run方法中,并通過View中的invalidate()方法刷新主線程中的繪的圖形,通過postInvalidate()刷新子線程中的圖形。數(shù)據(jù)庫(kù):
常用的數(shù)據(jù)庫(kù)有Oracle,需要安裝和配置的大型收費(fèi)數(shù)據(jù)庫(kù);MySQL是中型數(shù)據(jù)庫(kù),同樣需要安裝配置,但不需要收費(fèi);Sqlite是小型免費(fèi)的嵌入式數(shù)據(jù)庫(kù),占用內(nèi)存低,最新版本為3.0。Sqlite數(shù)據(jù)庫(kù)需要通過SqliteDatabaseOpenHelper進(jìn)行創(chuàng)建數(shù)據(jù)庫(kù),并通過SqliteDatabase進(jìn)行數(shù)據(jù)庫(kù)的操作。輔助類是抽象類,通過繼承,重寫兩個(gè)方法,并在子類的構(gòu)造方法中通過OpenHelper的構(gòu)造方法(Context context,String SqlName,SqliteDatabase.CursorFactory factory,int version)進(jìn)行數(shù)據(jù)庫(kù)的創(chuàng)建,在onCreate方法中,進(jìn)行數(shù)據(jù)庫(kù)表的創(chuàng)建,在onUpdate中進(jìn)行數(shù)據(jù)庫(kù)的版本更新。在數(shù)據(jù)庫(kù)的操作類中,執(zhí)行exect方法,通過sql語句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。Create table student(_id integer primary key auto increament ,name text);insert into student(_id,name)values(1,zx);delete from student where _id=1;update student set _id=2 where name=zx;select *from student;ListView、GridView適配器的優(yōu)化:
將布局文件中的控件進(jìn)行封裝,當(dāng)視圖加載時(shí),判斷可變視圖是否存在,當(dāng)不存在時(shí),通過布局文件獲取視圖,并新建封裝類,將地址通過setTag()進(jìn)行發(fā)送;當(dāng)視圖存在時(shí),重復(fù)利用地址—getTag()。反射:
存儲(chǔ)數(shù)據(jù)的方式:
共享數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)、文件、網(wǎng)絡(luò)、內(nèi)容提供者
廣播:
廣播傳播時(shí),需要接收者、發(fā)送者、廣播頻道;根據(jù)發(fā)送者的發(fā)送方式不同,分為有序廣播、無序廣播;有序廣播為接收者有接收順序,根據(jù)設(shè)置的優(yōu)先級(jí)不同,確定先后順序,接收者同時(shí)也是發(fā)送者,向后面的廣播發(fā)送消息,發(fā)送過程中,可以添加信息,也可以停止廣播的傳輸;無序廣播,接收者之間無聯(lián)系,均從發(fā)送者處接收信息;廣播在傳輸過程中,不能被添加信息,也不可能被停止。廣播在發(fā)送前,需要對(duì)接收者進(jìn)行注冊(cè),注冊(cè)方式有兩種,動(dòng)態(tài)注冊(cè)、靜態(tài)注冊(cè)。動(dòng)態(tài)注冊(cè),是在代碼中進(jìn)行,通過Context對(duì)象調(diào)用靜態(tài)方法進(jìn)行注冊(cè),所有的廣播均可以用動(dòng)態(tài)注冊(cè),其生命周期依賴于應(yīng)用,相對(duì)于靜態(tài)注冊(cè),比較節(jié)省內(nèi)存;靜態(tài)方法在清單文件中進(jìn)行注冊(cè),部分系統(tǒng)廣播不能通過靜態(tài)注冊(cè)進(jìn)行,其生命周期依賴于系統(tǒng),當(dāng)系統(tǒng)啟動(dòng),即運(yùn)行接收廣播,較耗內(nèi)存。廣播接收者需要繼承BroadcastReceiver,并實(shí)現(xiàn)抽象方法onReceive(),通過回調(diào)接口,進(jìn)行數(shù)據(jù)的傳輸。注意:廣播發(fā)送前,必須進(jìn)行接收者的注冊(cè),并且,當(dāng)顯示跳轉(zhuǎn)時(shí),不需要意圖過濾器。安卓布局:九種布局
線性布局,水平或垂直方向兩種格式,主要特點(diǎn)為權(quán)重,即規(guī)定各控件在視圖中的占有的比例;
相對(duì)布局,相對(duì)于父控件或兄弟控件的布局,各控件需指定相對(duì)位置; 絕對(duì)布局,指定各控件在視圖中的絕對(duì)位置,幾乎不再使用; 表格布局,子布局放在行中,列由控件表示(TableRow); 幀布局:覆蓋前面布局的布局,一般用于暫停按鈕等; 風(fēng)格布局:可以跨行、跨列的布局,占滿換行;
左右側(cè)滑:可以實(shí)現(xiàn)左右側(cè)滑,通過設(shè)置主菜單和二級(jí)菜單設(shè)置左右兩個(gè)菜單; 下拉刷新:設(shè)置下拉刷新、上拉加載的功能; 抽屜布局;
安卓版本及對(duì)應(yīng)的API:
1.6—4;2—7;3—11;4—15;4.3—18;5—20;5.1—21;6—23;7—25; 安卓四層架構(gòu):
應(yīng)用層:Java語言開發(fā),主要從事App開發(fā);
運(yùn)行庫(kù)層:Java語言與C語言,View視圖、管理類等的開發(fā); 架構(gòu)層:C語言與Linux語言,各種框架、瀏覽器等; 內(nèi)核層:Linux、C語言,開發(fā)各種驅(qū)動(dòng); 安卓四大組件:
Activity:界面,實(shí)現(xiàn)程序與用戶之間的交換,有自己的生命周期,七個(gè)生命周期;4種啟動(dòng)模式 Service:
BroadcastReceive:三要素,發(fā)送者、接收者、發(fā)送頻道(Intent);類型:有序(接收有序,有數(shù)據(jù)傳送,可以攔截?cái)?shù)據(jù))、無序廣播(相對(duì));注冊(cè)方式:靜態(tài)注冊(cè),持久監(jiān)聽,占用內(nèi)存比較高生命周期跟隨系統(tǒng),動(dòng)態(tài)注冊(cè)(代碼中),所有廣播都可以動(dòng)態(tài)注冊(cè),部分系統(tǒng)廣播不能動(dòng)態(tài)注冊(cè),臨時(shí)監(jiān)聽,占用內(nèi)存較少,生命周期隨應(yīng)用進(jìn)行;
ContentProvide:不能存放數(shù)據(jù),五種存放數(shù)據(jù)方式之一,特點(diǎn)為:①為數(shù)據(jù)的獲取等操作添加一個(gè)統(tǒng)一的接口②可以實(shí)現(xiàn)跨應(yīng)用訪問數(shù)據(jù);③可以實(shí)現(xiàn)Android中通訊錄、消息、音頻、視頻等的訪問或操作;通過ContentReceive進(jìn)行數(shù)據(jù)的訪問,可以對(duì)數(shù)據(jù)進(jìn)行增刪改查操作。
動(dòng)畫: IO流: 序列化: AlertDialog:
Set實(shí)現(xiàn)類: 手機(jī)電量檢測(cè):
自定義SurfaceView:
自定義View:三個(gè)構(gòu)造方法的區(qū)別
Message:Handler.obtain/new/Message.obtain
HttpUriConnection訪問網(wǎng)絡(luò)
gride 異步任務(wù) 動(dòng)畫
抽象類和接口 反射 克隆 序列化 側(cè)滑的實(shí)現(xiàn) 數(shù)據(jù)庫(kù) Socket:
Gson解析
異步任務(wù)和子線程區(qū)別 WebView 版本更新 照片的圓角化
Collection與Collections Sql語句
MVP框架與MVC: TCP與UDP的區(qū)別: 一鍵分享的流程: Http協(xié)議的理解: 不使用框架訪問網(wǎng)絡(luò): List集合與set集合: 自定義View的流程: 線性布局的特點(diǎn): ViewPager的原理: 服務(wù)的啟動(dòng)方式:
Activity的啟動(dòng)方式: Xml數(shù)據(jù)解析:
第三篇:Android 個(gè)人總結(jié)
Android 個(gè)人總結(jié)
通過本學(xué)期的的學(xué)習(xí),我知道了android是由google開發(fā)的一款手機(jī)平臺(tái),android的基本架構(gòu)是基于linux內(nèi)核,由內(nèi)核向外的反別為庫(kù)和應(yīng)用架構(gòu),然后就是我們手機(jī)上的可視化應(yīng)用了,android是一個(gè)系統(tǒng),但是并非是操作系統(tǒng)。
在開發(fā)之前,我們首先要搭建一個(gè)開發(fā)環(huán)境,用的是java編程的eclipse,我們從網(wǎng)上下載sdk包,里面包含了android開發(fā)常用的工具,android既是手機(jī)操作系統(tǒng),也是跨平臺(tái)(windows,mac,linux)的開發(fā)工具,雖然是使用linux為核心的平臺(tái),但是你可以在很多地方感覺到類似做網(wǎng)頁開發(fā)的感覺。具有本身獨(dú)特的進(jìn)程管理方式,完整的上網(wǎng)功能,搭配了google地圖,Gmail等服務(wù),即使像我們這些尚未入門的開發(fā)者也能開發(fā)出自己理想的應(yīng)用程序來。
剛開始的時(shí)候,得知android開發(fā)需要使用java語言心里了小小的畏懼,但隨著學(xué)習(xí)的漸漸深入就會(huì)發(fā)現(xiàn)android平臺(tái)只是使用了java的語法而已,所以,即使我們不具備java語言開發(fā)的基礎(chǔ),也可以放心地加入到android開發(fā)當(dāng)中來。
第一節(jié)課,老師向我們?cè)敿?xì)介紹了開發(fā)界面右邊窗口的內(nèi)容,首先是src目錄,里面包含了我們開發(fā)界面的java文件以及各種我們創(chuàng)建的類組成的開發(fā)包。然后是gen目錄,里面涵蓋的是系統(tǒng)的類文件(如R.java,Buidconfig.java)與android系統(tǒng)的依賴文件(Android Dependencies)。再下來是assets(用戶資源文件),里面文件的訪問是通過文件路徑的形式調(diào)用。Bin文件里面包括了res資源文件,android項(xiàng)目配置文件androidmanifest以及我們開發(fā)之后產(chǎn)生的后綴為.apk的應(yīng)用程序文件。Res是系統(tǒng)資源目錄,我們要用到得圖片資源,顏色資源,字符串資源都在里面。一般的開發(fā)都要用到界面文件也包含在里面。
Eclipse具有史上超豪華的手機(jī)控件,包括常用的文本文件,文本框,按鈕,進(jìn)度條等,還有特殊形式的email,gmail文本框,在開發(fā)過程當(dāng)中,很多控件都是以拖拉的形式拖拽到開發(fā)界面上,大大地減少了我們開發(fā)時(shí)候的工作量,在配置文件中,我們可以添加各種各樣的系統(tǒng)動(dòng)作,以及系統(tǒng)服務(wù),還可以建立用戶自己的文件庫(kù)。
當(dāng)我們開發(fā)完成的時(shí)候,就可以運(yùn)行手機(jī)模擬器,在上面,我們可以像操作當(dāng)今市場(chǎng)上最流行的android手機(jī)一樣操作我們的模擬器,可視化的界面可以我們隨心所欲地下載我們開發(fā)的應(yīng)用程序到模擬器上,就可以實(shí)現(xiàn)步步跟進(jìn),想要修改哪里就一目了然了,模擬器上人性化的設(shè)計(jì)界面大大方便了用戶與機(jī)器之間的交流。如果我們擁有一部android系統(tǒng)的手機(jī)的話,就可以把自己開發(fā)的應(yīng)用程序下到手機(jī)上,看到自己的成果,頓生成就感,真的很有樂趣。也加大了我對(duì)學(xué)習(xí)android的信心。
總體來說,學(xué)習(xí)android就要不怕困難,迎難而上。Android不久可以滿足自己的成就感,還可以在未來的生活中找到自己理想的工作。用別人準(zhǔn)備好的各種類,包來開發(fā)出自己獨(dú)特風(fēng)格的應(yīng)用程序,既省時(shí)又省力,何樂而不為呢。在這里,要感謝曾老師對(duì)我的栽培和關(guān)懷,他教給了我知識(shí),使我在學(xué)習(xí)的時(shí)候少走了很多的彎路,也增加了我對(duì)未來工作的信心。
第四篇:Android 課程總結(jié)
一、Android開發(fā)環(huán)境的搭建。
1、Android SDK的安裝;
2、ADT的安裝和配置;
3、Android 模擬器的配置。
二、編寫第一個(gè)Android程序───Hello World(1學(xué)時(shí))
1、創(chuàng)建一個(gè)Android應(yīng)用程序的步驟;
2、Android 應(yīng)用程序目錄結(jié)構(gòu);
3、AndroidManidest.xml文件的作用;
4、Android相關(guān)資源文件的作用。
三、Activity及Activity和Intent(2學(xué)時(shí))
1、Activity的主要作用;
2、創(chuàng)建一個(gè)Activity的方法;
3、在AndroidManifest.xml文件中的注冊(cè)應(yīng)用Activity的方法;
4、在Activity中添加控件的方法;
5、多個(gè)Activity之間的切換;
6、Intent的基本作用;
7、在一個(gè)Activity中啟動(dòng)另一個(gè)Activity的方法;
8、使用Intent在Activity中傳遞數(shù)據(jù)的基本方法。
四、常見控件的使用方法(基礎(chǔ))
1、TextView的使用方法;
2、EditText的使用方法;
3、Button的使用方法;
4、Menu的使用方法。
五、Activity的生命周期(2學(xué)時(shí))
1、Activity的七個(gè)周期:
① OnCreate();② OnDestroy();③ OnPause();④ OnRestart();⑤ OnResume();⑥ OnStart();⑦ OnStop();
2、Task的基本概念;
3、Activity和Task之間的關(guān)系;
4、對(duì)話框風(fēng)格的Activity的使用方法。
六、Activity的布局(3學(xué)時(shí))
1、LinearLayout的使用方法;
2、TableLayout的使用方法;
3、LinearLayout和TableLayout的嵌套使用;
4、RelativeLayout的使用方法(重點(diǎn)、難點(diǎn))
七、常用控件是使用方法二(2學(xué)時(shí))
1、RadioGroup和RadioButton的使用方法;
2、CheckBox的使用方法;
3、Toast的基本用法。
4、ProgressBar的使用方法;
5、ListView的用法。
八、Handler的使用方法(2學(xué)時(shí))
1、Handler的基本概念;
2、Handler的基本用法;
3、使用Handler更新ProgressBar
4、Handler與線程;
5、Bundle的用法;
6、在新線程中處理消息的方法。
九、SQLite使用方法
1、SQLite介紹;
2、SQLiteOpenHeper使用方法;
3、使用adb訪問SQLite
4、增、刪、改、查。
十、Android文件下載
1、使用HTTP協(xié)議下載文件;
2、將下載的文件寫入SDCARD。
十一、Content Provider初步(2學(xué)時(shí))
1、Content Provider的基本概念;
2、Uri;
3、Content Provider的實(shí)現(xiàn)方法。
十二、XML文件的解析方法
1、什么是SAX;
2、SAX的基本原理;
3、SAX常用接口;
4、SAX解析。
十三、廣播機(jī)制(2學(xué)時(shí))
1、Android的廣播機(jī)制(圖鑒);
2、BroadCastReceive的作用;
3、BroadCastReceive的編寫方法;
4、BroadCastReceive的生命周期。
5、注冊(cè)BroadCastReceive的方法;
6、Android內(nèi)置BroadCastReceive Actions。
十四、WIFI網(wǎng)絡(luò)的使用
1、什么是WIFI;
2、獲取WIFI網(wǎng)卡的狀態(tài);
3、操作WIFI所需要的權(quán)限;
4、改變WIFI網(wǎng)卡的狀態(tài)。
十五、Socket編程
1、什么是Socket;
2、Socket基本通信模型(見圖);
3、使用基于TCP協(xié)議的Socket;
4、使用基于UDP協(xié)議的Socket。
十六、Service
1、Service是什么;
2、Service不是什么;
3、Service的生命周期;
4、啟動(dòng)和停止Service;
第五篇:Android方案總結(jié)
一、硬件描述
如上圖,應(yīng)用程序的開發(fā)過程中我們使用了飛思卡爾的i.MX51 EVK Hardware。設(shè)備提供的支持如下:多標(biāo)準(zhǔn)音頻回放;多標(biāo)準(zhǔn)視頻回放;開放的系統(tǒng)支持;
二、軟體結(jié)構(gòu)
1、Android系統(tǒng)的初始化流程圖如下所示:
BeginMkdir: /dev,/proc,/sys,/dev/pts,/dev/socketaction_for_each_trigger(“early-init”, action_add_queue_tail);property_set(ro.XXX)open_devnull_stdio():fd is 0,1,2device_initaction_for_each_trigger(“init”, action_add_queue_tail)log_init: /dev/__kmsg__property_initaction_for_each_trigger(“early-boot”, action_add_queue_tail);parse_config_file(“/init.rc”)Check have /dev/consoleaction_for_each_trigger(“boot”, action_add_queue_tail);import_kernel_cmdline: /proc/cmdlineload_565rle_image(INIT_IMAGE_FILE)queue_all_property_triggers()get_hardware_name: /proc/cpuinfoIf load okrestart_processes()Yparse_config_file(/init.%s.rc)Show Image, and Print “A N D R O I D”to ttyEnd
可以具體描述如下:(1).初始化log系統(tǒng)。
(2).解析/init.rc和/init.%hardware%.rc文件。
(3).執(zhí)行 early-init action in the two files parsed in step 2。
(4).設(shè)備初始化,例如:在 /dev 下面創(chuàng)建所有設(shè)備節(jié)點(diǎn),下載 firmwares。
(5).初始化屬性服務(wù)器,Actually the property system is working as a share memory.Logically it looks like a registry under Windows system。
(6).執(zhí)行 init action in the two files parsed in step 2。
(7).開啟 屬性服務(wù)。
(8).執(zhí)行 early-boot and boot actions in the two files parsed in step 2。
(9).執(zhí)行 Execute property action in the two files parsed in step 2。
(10).進(jìn)入一個(gè)無限循環(huán) to wait for device/property set/child process exit events。
2、方案基本框架,如下圖所示:
Native codeDaivik runtimeAndroidNDKappsJNIAndroidSDKappsAndroid app frameworkStandard librariesLinux kernel+Android extension
(1)圖中Native Code包含一系列運(yùn)行與Linux內(nèi)核之上,由C/C++語言寫成的庫(kù),這些庫(kù)提供基本的系統(tǒng)級(jí)功能。其為應(yīng)用層提供了本地開發(fā)的可擴(kuò)展性,在此次開發(fā)過程中,Native Code主要為我們提供了音視頻的編解碼(即我們?cè)诖藢娱_發(fā)了我們自己的音視頻的編解碼)。系統(tǒng)中主要使用的是G711音頻編解碼,實(shí)現(xiàn)語音的本地錄音及播放;FFMPEG視頻解碼,進(jìn)行圖像視頻的解碼,實(shí)現(xiàn)視頻的實(shí)時(shí)播放。
(2)Dalvik runtime的相關(guān)介紹。Android系統(tǒng)的應(yīng)用開發(fā)語言是Java,而保障這一點(diǎn)的就是Android runtime。Java語言的運(yùn)行需要有虛擬機(jī)的存在,而Android runtime 的核心就是一個(gè)稱之為Dalvik的虛擬機(jī)。另外,Android runtime還包含了一個(gè)強(qiáng)大的Java核心類庫(kù)。這個(gè)類庫(kù)從功能上涵蓋了傳統(tǒng)Java核心類庫(kù)的大多數(shù)功能。應(yīng)用程序調(diào)用Android 函數(shù)庫(kù)(即Android runtime中的Java核心類庫(kù))中的函數(shù)時(shí),其實(shí)只是調(diào)用的一個(gè)函數(shù)名,具體實(shí)現(xiàn)在Native Code中的Library中。即是Library為上層的應(yīng)用提供API供開發(fā)使用。(3)關(guān)于JNI。Java Native Interface(JNI)標(biāo)準(zhǔn),它允許Java代碼和其他語言寫的代碼進(jìn)行交互。JNI一開始是為了本地已編譯語言,尤其是C和C++而設(shè)計(jì)的,但是它并不妨礙你使用其他語言,只要調(diào)用約定受支持就可以了。我們開發(fā)的音視頻本地編解碼庫(kù),就是通過JNI來使用的。如下,private static native void InitEnv();private static native int drawFrame(Bitmap bitmap, byte[] inbuffer, int buf_len);這是我們?cè)诔绦蛑姓{(diào)用的本地函數(shù),先要使用關(guān)鍵字native進(jìn)行本地聲明。static { System.loadLibrary(“decode”);}
這是用來加載我們的c動(dòng)態(tài)庫(kù)的,上面的native聲明中的方法就是在我們加載的庫(kù)中具體實(shí)現(xiàn)的。
(4)Linux kernel 和Android extension部分。這一部分主要為我們提供了諸如硬件設(shè)備驅(qū)動(dòng)(如display driver、camera driver等)、進(jìn)程管理、內(nèi)存管理、電源管理等底層功能。這一層的Linux并不是標(biāo)準(zhǔn)的GNU/Linux,而是根據(jù)我們的商業(yè)需求進(jìn)行大量的定制。