導航:首頁 > 操作系統 > android44api20

android44api20

發布時間:2024-11-28 20:00:09

A. android 平台上的軟體開發要是用什麼語言

android 平台上的軟體開發要是用什麼語言?

android應用軟體開發使用java語言
雖然是基於linux kernel, 並且是用C來寫的部分Android程式碼, 但是寫Android應用程式還是用java.
我的回答你滿意嗎?

如何學習 iOS 平台上的軟體開發

iOS是目前移動端開發的主流--===、、
不管學習任何程式語言都入門難,而我們選擇培訓的最終目的是為了學習更好的知識和技能,以便找到更好的工作,並不是為了省錢找一個培訓班湊合一下,所以選擇iOS培訓機構要知道自己想要什麼,培訓完成什麼樣,機構能給於你什麼?相比而言睿峰教育管理嚴格效果會更好,畢竟把大量的內容壓縮到幾個月學習,需要的是不僅是老師的知道還有自己付出,師父領進門這是大家都知道的道理,所以教學內容才是王道。睿峰教育的專案式學習,分組專案PK,激發學生創意設計和協作溝通能力,把iOS的商業價值發揮出來,才是我們選擇培訓的最終追求。

PSP 的軟體開發用什麼語言

游戲一般都是 C++開發的
不過游戲 主機 開發一般都是需要相關套件
而且周期較長 一個人很難做得來
PSP程式開發例子解析(二)Images2008-07-03 20:46第二個例子程式演示了如何在螢幕上繪制圖片 附上原始碼 變化不大 很簡單的幾句程式碼搞定了
1.標頭檔案GameApp.h
#ifndef _GAMEAPP_H_
#define _GAMEAPP_H_
#include <JApp.h>
class JQuad;JQuad定義了圖片上的顯示範圍 比如很多的小圖片存為了一個大圖片 在大圖片上指定顯示的座標
class JSprite;動畫 似乎沒用到
class JTexture;把一個圖片讀成了一個JTexture = =!裡面不曉得有什麼內容 沒有doc可看
class GameApp: public JApp
{
private:
JTexture* mBgTex;整個背景的圖片
JTexture* mSpriteTex;2個人物的圖片
JQuad* mBg;定義了整個背景的大小
JQuad* mBoy;男孩在人物圖片上的大小
JQuad* mGirl;女孩在人物圖片上的大小
public:
GameApp();
virtual ~GameApp();
virtual void Create();
virtual void Destroy();
virtual void Update();
virtual void Render();
virtual void Pause();
virtual void Resume();
};
#endif
2.原始碼檔案GameApp.cpp
#include <stdio.h>
#include <JGE.h>
#include <JRenderer.h>
#include <JLBFont.h>
#include <JSprite.h>
#include <JFileSystem.h>
#include "GameApp.h"
GameApp::GameApp()
{
mBgTex = NULL;
mBg = NULL;
mSpriteTex = NULL;
mBoy = NULL;
mGirl = NULL;都給它設成NULL幹啥 沒有意義啊
GameApp::~GameApp()
{
}
程式啟動
void GameApp::Create()
{
JRenderer* renderer = JRenderer::GetInstance();
Load background texture (texture format can be PNG, JPG or GIF)
mBgTex = renderer->LoadTexture("bg.jpg");初始化載入背景圖片 可以PNG JPG GIF的 開發的API封裝的很好 都提供的了高層的API 沒有暴露什麼底層的東西= =! 看來之前我對圖片處理的考慮有點多慮了 能執行上100M的3D游戲 應該不會太在乎記憶體消耗 不泄露就行
Load texture for the characters (use TEX_TYPE_USE_VRAM to load texture into VRAM on PSP and this can speed up the rendering)
mSpriteTex = renderer->LoadTexture("pla.png", TEX_TYPE_USE_VRAM);用這個引數來加速
JQuad定義了一個范圍 在沒BgTex上 從左上角到右下角 看程式碼知道了PSP螢幕的尺寸為480*272
mBg = new JQuad(mBgTex, 0, 0, 480, 272); Create background quad for rendering.
Now let's create the image quads for the characters. The o characters are stored in one texture
so we have to know the location and size of each one to make the quads.
mBoy = new JQuad(mSpriteTex, 0, 0, 67, 88);同樣對男孩的區域定義范圍
mBoy->SetHotSpot(33.5f, 44.0f); Set the pivot point to the middle.定義了這個圖片的核心座標 這里定義為中心 在旋轉的時候圍繞中心旋轉 恩
mGirl = new JQuad(mSpriteTex, 68, 0, 68, 90);女孩的圖片從68開始越過了男孩的圖片
mGirl->SetHotSpot(34.0f, 45.0f);同樣設定中心為HotSpot
}
void GameApp::Destroy()
{
SAFE_DELETE(mBgTex);呼叫了一個巨集 在JTypes.h裡面:#define SAFE_DELETE(x) if (x) { delete x; x = NULL; } 另有文章說釋放JTexture需要用什麼engine.什麼 應該效果是一樣的mEngine->FreeMusic(mMusic);
SAFE_DELETE(mBg);
SAFE_DELETE(mSpriteTex);
SAFE_DELETE(mBoy);
SAFE_DELETE(mGirl);
}
Update方法沒有變化
void GameApp::Update()
{
JGE* engine = JGE::GetInstance();
if (engine->GetButtonClick(PSP_CTRL_TRIANGLE)) Do a screen shot when the TRIANGLE button is pressed
{
char s[80];
sprintf(s, "ms0:/screenshot.png");
JRenderer::GetInstance()->ScreenShot(s);
}
if (engine->GetButtonClick(PSP_CTRL_CROSS)) Exit when the CROSS button is pressed
{
engine->End();
return;
}
}
void GameApp::Render()
{
JRenderer* renderer = JRenderer::GetInstance();
renderer->RenderQuad(mBg, 0, 0);具體畫螢幕了 繪制整個背景 畫mBg的范圍JQuad
renderer->RenderQuad(mBoy, 33.5, 44, 0.0f, 1.0f, 1.0f); Scale down the characters a little bit when rendering.
renderer->RenderQuad(mGirl, 320, 235, 0.0f, 0.7f, 0.7f);引數分別為x點 y點 左上角開始計算 0.0f為旋轉角度 沒弄明白這個單位是什麼 0.7f 和0.7f是x軸和y軸的縮放比例1是按照原大小0.7f是縮小了
Sleep(1);自己加的 純粹是為了減少CPU佔用 否則一執行CPU就滿了 似乎這個函式在PSP中不支援
}
void GameApp::Pause()
{
}
void GameApp::Resume()

Android軟體開發用什麼語言

android應用軟體開發使用java語言
雖然是基於linux kernel, 並且是用C來寫的部分Android程式碼, 但是寫Android應用程式還是用java.

安卓Android軟體開發用什麼語言?

我知道的安卓開發語言大概有三種。

  1. java:已經成為安卓開發很久很久的一個語言,也是目前很流行的開發語言,很多公司的安卓開發者都在用這個語言,但是java收購者甲骨文公司一直在給google出難題,所以android官方研發了一種開發語言,叫「Kotlin」。

  2. Kotlin:語言和js很相似,寫法很簡單,如果你不想從java學起那麼可以去學習kotlin,雖然這門語言是google官方主推的語言,但一直無法摒棄java,這也是目前很多公司面試要求精通java語言的原因,如果學習java那肯定也能寫後台甚至是javaweb,所以找工作也不單一。

  3. 一些第三方js動態庫語言——reactnative,這種語言可以開發web/wap/android/ios多種專案,現在很多APP也正在用這種類似的技術(淘寶、京東),而且這種技術可以實現熱更新,也就是在不重新上傳應用市場的情況下更新你手機中已經安裝的APP程式碼,正是因為這種技術,蘋果appstore強制下架了30%這種技術APP,而不能開發ios的這種技術和咸魚沒什麼區別,所以這種語言有利有弊。

Android軟體開發應該用什麼語言?

可以,Android軟體就是以Java作為開發語言。

釋義:

android軟體開發是根據使用者要求建造出android軟體或者系統中的軟體部分的過程。android軟體開發是一項包括需求捕捉,需求分析,設計,實現和測試的系統工程。軟體一般是用某種程式設計語言來實現的。通常採用軟體開發工具可以進行開發。

框架:

開發人員也可以完全訪問核心應用程式所使用的API框架。該應用程式的架構設計簡化了元件的重用;任何一個應用程式都可以釋出它的功能塊並且任何其它的應用程式都可以使用其所釋出的功能塊(不過得遵循框架的安全性限制)。同樣,該應用程式重用機制也使使用者可以方便的替換程式元件。

安卓語言特點:

安卓應用的開發語言用的是Java語言,並且在Android中也用到了Java核心類庫的大量的類,因此,在學習安卓開發之前,可以先把Java基本語法和Java SE的基礎類庫好好學習一下。安卓應用程式開發是以Java語言為基礎的,所以沒有扎實的Java基礎知識,只是機械的照抄別人的程式碼,是沒有任何意義的。建議在安卓課程前期的java學習階段中,需要用心的學好。

android平台MMI軟體開發

mmi 是摩托羅拉移動 的縮寫 已經被google收購了。google找不到很牛的硬體廠商支援,他們決定自己來做。
每一個硬體廠商在系結自己的android系統時,多多少少都會對原來系統做點自己的改動,大多都是圖形效果上的。
其實就是要求你會android開發經驗。

GOOGLE地球是用什麼語言軟體開發的?

估計是C語言型別的吧。
Microsoft Visual Studio 2008

學了C#,想進行Windows mobile平台上軟體開發。

Visual Studio 2008 安裝之後
自帶Windows mobile的開發平台和手機模擬器
書籍的話,我沒看
自己想一個功能,然後去寫程式碼實現,不會的就去網路搜索
做完了就什麼都會了
-----------------------------------------------------------------------------
WM好像啥都能實現,只要你別想亂七八糟的功能就行

crm軟體開發用什麼語言

crm 對於軟體系統而言,應該是大寫的CRM。
CRM(Customer Relationship Management),即客戶關系管理。CRM的主要含義就是通過對客戶詳細資料的深入分析,來提高客戶滿意程度,從而提高企業的競爭力的一種手段。
CRM是一整套使用資料庫進行管理資料的資料管理系統,按照目前軟體開發模式,它又有windows應用系統及web應用系統。
windows應用系統可由 . 、pb、delphi、vb、vc 等開發工具開發;
web應用系統可有 .、java、asp、jsp、php等開發工具開發。

B. android中五種布局有什麼不同

五種布局方式,分別是:FrameLayout(框架布
局),LinearLayout
(線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)

一、FrameLayout

這個布局可以看成是牆腳堆東西,有一個四方的矩形的左上角牆腳,我們放了第一個東西,要再放一個,那就在放在原來放的位置的上面,這樣依次的放,會蓋住原來的東西。這個布局比較簡單,也只能放一點比較簡單的東西。

二、LinearLayout

線性布局,這個東西,從外框上可以理解為一個div,他首先是一個一個從上往下羅列在屏幕上。每一個LinearLayout裡面又可分為垂直布局
(android:orientation="vertical")和水平布局(android:orientation="horizontal"
)。當垂直布局時,每一行就只有一個元素,多個元素依次垂直往下;水平布局時,只有一行,每一個元素依次向右排列。

linearLayout中有一個重要的屬性 android:layout_weight="1",這個weight在垂直布局時,代錶行距;水平的時候代表列寬;weight值越大就越大。

三、AbsoluteLayout

絕對布局猶如div指定了absolute屬性,用X,Y坐標來指定元素的位置android:layout_x="20px"
android:layout_y="12px" 這種布局方式也比較簡單,但是在垂直隨便切換時,往往會出問題,而且多個元素的時候,計算比較麻煩。

四、RelativeLayout

相對布局可以理解為某一個元素為參照物,來定位的布局方式。主要屬性有:

相對於某一個元素
android:layout_below="@id/aaa" 該元素在 id為aaa的下面
android:layout_toLeftOf="@id/bbb" 改元素的左邊是bbb

相對於父元素的地方

android:layout_alignParentLeft="true" 在父元素左對齊
android:layout_alignParentRight="true" 在父元素右對齊

還可以指定邊距等,具體詳見API

五。TableLayout

表格布局類似Html裡面的Table。每一個TableLayout裡面有表格行TableRow,TableRow裡面可以具體定義每一個元素,設定他的對齊方式 android:gravity="" 。

每一個布局都有自己適合的方式,另外,這五個布局元素可以相互嵌套應用,做出美觀的界面。-----------------cvsyun。

C. 如何在Android中使用OpenCV

如何在Android程序中使用OpenCV

有兩種方式(重點講後面一種):

1.使用OpenCV Java API。

OpenCV安裝路徑"F:OpenCV-2.3.1-android-bin"下有兩個文件夾


將文件夾"OpenCV-2.3.1"拷貝到你的Eclipse工作空間所在的目錄,也就是在你的項目的上一級目錄中,然後導入到工作空間中,在Package Explorer中選擇你的項目,單機右鍵在彈出菜單中選擇Properties,然後在彈出的Properties窗口中左側選擇Android,然後點擊右下方的Add按鈕,選擇OpenCV-2.3.1並點擊OK,


此時,展開你的項目樹,你可以看到新加了一個OpenCV-2.3.1_src目錄,如下圖,那麼就是正確添加了OpenCV Java API,否則就是你放置OpenCV-2.3.1的目錄路徑不正確。


然後就可以在你的Java源文件中導入OpenCV的API包,並且使用OpenCV API了,OpenCV API的包的形式如下:

Org.opencv.(OpenCV模塊名).(OpenCV類名)

例如:

Org.opencv.core.Mat

2.利用JNI編寫C++ OpenCV代碼,通過Android NDK創建動態庫(.so)

新建一個工作空間,例如"TestOpenCV",在Window->Preferences中設置好Android SDK的路徑。


然後新建一個Android項目,Build Target選擇Android2.2,命名為"HaveImgFun",活動名改為HaveImgFun,Package name中填寫com.testopencv.haveimgfun,最後點擊finish。

如同使用OpenCV Java API那樣,將OpenCV-2.3.1文件夾拷貝到與工作空間同一級目錄中;另外,將"F:OpenCV-2.3.1-android-binsamples"下的includeOpenCV.mk文件拷貝到和項目HaveImgFun同一級目錄中:


(上面這個各個文件夾和文件的放置很重要,因為OpenCV-2.3.1下的OpenCV.mk中有很多相對路徑的指定,如果不是這樣放置,在NDK生成動態庫時可能會報文件或文件夾無法找到的錯誤)

選擇Package Explorer中你的項目,右鍵選擇new->folder,新建一個名為jni的文件夾,用來存放你的c/c++代碼。

然後把res->layout下的main.xml的內容改為下面所示:


1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7 <Button android:layout_height="wrap_content"
8 android:layout_width="fill_parent"
9 android:id="@+id/btnNDK"
10 android:text="使用C++ OpenCV進行處理" />
11 <Button android:layout_height="wrap_content"
12 android:layout_width="fill_parent"
13 android:id="@+id/btnRestore"
14 android:text="還原" />
15 <ImageView android:id="@+id/ImageView01"
16 android:layout_width="fill_parent"
17 android:layout_height="fill_parent" />
18 </LinearLayout>


上面的代碼就是一個線性布局裡麵包含2個按鈕加上一個顯示圖像的ImageView

在文件夾src下的com.testopencv.haveimgfun包中新建一個類用於包裝使用了opencv c++代碼的動態庫的導出函數,類名為LibImgFun。

Eclipse會為你創建一個新的文件LibImgFun.java,將裡面的內容改為:


1 package com.testopencv.haveimgfun;
2 public class LibImgFun {
3 static {
4 System.loadLibrary("ImgFun");
5 }
6 /**
7 * @param width the current view width
8 * @param height the current view height
9 */
10 public static native int[] ImgFun(int[] buf, int w, int h);
11 }


從上面的代碼可以得知,我們的動態庫名字應該為「libImgFun.so」,注意"public static native int[] ImgFun(int[] buf, int w, int h)"中的native關鍵字,表明這個函數來自native code。static表示這是一個靜態函數,這樣就可以直接用類名去調用。

在jni文件夾下建立一個"ImgFun.cpp"的文件,內容改為下面所示:


1 #include <jni.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <opencv2/opencv.hpp>
5 using namespace cv;
6
7 extern "C"
8 {
9 JNIEXPORT jintArray JNICALL Java_com_testopencv_haveimgfun_LibImgFun_ImgFun(JNIEnv* env, jobject obj, jintArray buf, int w, int h);
10 JNIEXPORT jintArray JNICALL Java_com_testopencv_haveimgfun_LibImgFun_ImgFun(JNIEnv* env, jobject obj, jintArray buf, int w, int h){
11
12 jint *cbuf;
13 cbuf = env->GetIntArrayElements(buf, false);
14 if(cbuf == NULL)
15 {
16 return 0;
17 }
18
19 Mat myimg(h, w, CV_8UC4, (unsigned char*)cbuf);
20 for(int j=0;j<myimg.rows/2;j++)
21 {
22 myimg.row(j).setTo(Scalar(0,0,0,0));
23 }
24
25 int size=w * h;
26 jintArray result = env->NewIntArray(size);
27 env->SetIntArrayRegion(result, 0, size, cbuf);
28 env->ReleaseIntArrayElements(buf, cbuf, 0);
29 return result;
30 }
31 }


上面的代碼中#include <jni.h>是必須要包含的頭文件,#include <opencv2/opencv.hpp>是opencv要包含的頭文件。

動態庫要導出的函數如下聲明:

JNIEXPORT jintArray JNICALL Java_com_testopencv_haveimgfun_LibImgFun_ImgFun(JNIEnv* env, jobject obj, jintArray buf, int w, int h);

JNIEXPORT 和JNICALL是必須要加的關鍵字

jintArray就是int[],這里返回類型要麼為空,要麼為jni中定義的類型,事實上就是CC++類型前面加上j,如果是數組,則在後面加上Array。

函數名的命名規則如下:

Java_(包路徑)_(類名)_(函數名) (JNIEnv *env, jobject obj, 自己定義的參數...)

包路徑中的"."用"_"(下劃線)代替,類名就是上麵包裝該動態庫函數的類的名字,最後一個才是真正的函數名;JNIEnv *env和jobject obj這兩個參數時必須的,用來調用JNI環境下的一些函數;後面就是你自己定義的參數。在這里,jintArray buf代表了傳進來的圖像的數據,int w是圖像的寬,int h是圖像的高。

這個函數的功能是將傳進來的圖像的上半部分塗成黑色。

然後再在jni下新建兩個文件"Android.mk"文件和"Application.mk"文件,這兩個文件事實上就是簡單的Makefile文件。

其中將Android.mk的內容改為如下所示:

LOCAL_PATH:=$(callmy-dir)

include$(CLEAR_VARS)

include../includeOpenCV.mk

ifeq("$(wildcard$(OPENCV_MK_PATH))","")

#trytoloadOpenCV.mkfromdefaultinstalllocation

include$(TOOLCHAIN_PREBUILT_ROOT)/user/share/OpenCV/OpenCV.mk

else

include$(OPENCV_MK_PATH)

endif

LOCAL_MODULE:=ImgFun

LOCAL_SRC_FILES:=ImgFun.cpp

include$(BUILD_SHARED_LIBRARY)

Application.mk的內容改為如下所示:

APP_STL:=gnustl_static

APP_CPPFLAGS:=-frtti-fexceptions

APP_ABI:=armeabiarmeabi-v7a

其中APP_ABI指定的是目標平台的CPU架構。(經過很多測試,android2.2必須指定為armeabi,android2.2以上的使用armeabi-v7a,如果沒有設置對,很有可能安裝到android虛擬機失敗,當然你同時如上面寫上也是可以的)

上面的步驟完成後,就可以使用NDK生成動態庫了,打開cygwin,cd到項目目錄下:


輸入$NDK/ndk-build命令,開始創建動態庫。


這時候刷新Eclipse的Package Explorer會出現兩個新的文件夾obj和libs。

現在,只剩最後一步完成這個測試程序。

將一張圖片,例如"lena.jpg"放到項目res->drawable-hdpi目錄中並刷新該目錄。

然後將HaveImgFun.java的內容改為下面所示:


1 package com.testopencv.haveimgfun;
2
3 import android.app.Activity;
4 import android.graphics.Bitmap;
5 import android.graphics.Bitmap.Config;
6 import android.graphics.drawable.BitmapDrawable;
7 import android.os.Bundle;
8 import android.widget.Button;
9 import android.view.View;
10 import android.widget.ImageView;
11
12 public class HaveImgFun extends Activity{
13 /** Called when the activity is first created. */
14 ImageView imgView;
15 Button btnNDK, btnRestore;
16
17 @Override
18 public void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState);
20 setContentView(R.layout.main);
21
22 this.setTitle("使用NDK轉換灰度圖");
23 btnRestore=(Button)this.findViewById(R.id.btnRestore);
24 btnRestore.setOnClickListener(new ClickEvent());
25 btnNDK=(Button)this.findViewById(R.id.btnNDK);
26 btnNDK.setOnClickListener(new ClickEvent());
27 imgView=(ImageView)this.findViewById(R.id.ImageView01);
28 Bitmap img=((BitmapDrawable) getResources().getDrawable(R.drawable.lena)).getBitmap();
29 imgView.setImageBitmap(img);
30 }
31
32 class ClickEvent implements View.OnClickListener{
33 public void onClick(View v){
34 if(v == btnNDK){
35 long current=System.currentTimeMillis();
36 Bitmap img1=((BitmapDrawable) getResources().getDrawable(R.drawable.lena)).getBitmap();
37 int w=img1.getWidth(),h=img1.getHeight();
38 int[] pix = new int[w * h];
39 img1.getPixels(pix, 0, w, 0, 0, w, h);
40 int[] resultInt=LibImgFun.ImgFun(pix, w, h);
41 Bitmap resultImg=Bitmap.createBitmap(w, h, Config.RGB_565);
42 resultImg.setPixels(resultInt, 0, w, 0, 0,w, h);
43 long performance=System.currentTimeMillis()-current;
44 imgView.setImageBitmap(resultImg);
45 HaveImgFun.this.setTitle("w:"+String.valueOf(img1.getWidth())+",h:"+String.valueOf(img1.getHeight())+"NDK耗時"+String.valueOf(performance)+" 毫秒");
46 } else if(v == btnRestore){
47 Bitmap img2=((BitmapDrawable) getResources().getDrawable(R.drawable.lena)).getBitmap();
48 imgView.setImageBitmap(img2);
49 HaveImgFun.this.setTitle("使用OpenCV進行圖像處理");
50 }
51 }
52 }
53 }


點擊全部保存,OK,現在可以選擇一個Android虛擬機運行看一下效果,配置好Run Configuration然後點擊Run,得到下面的結果:

D. Android對Linux內核有怎樣的改動

我們知道Android是一個開源系統,但是並不徹底,而且Android從多個方面對Linux內核進行了改動與增強,盡管一度和Linux基金會在內核方面鬧得不愉快,但是最終也達成了和解。下面將對此進行詳細介紹和分析。

1 、Goldfish

Android模擬器通過運行一個Goldfish的虛擬CPU.Goldfish來運行arm926t指令集(arm926t屬於armv5構架),並且模擬了輸入/輸出,比如鍵盤輸入和LCD 輸出。這個模擬器其實是在qemu之上開發的,輸入/輸出是基於libSDL的。既然Goldfish是被模擬器運行的虛擬CPU,那麼當Android在真實的硬體設備上運行時,我們就需要去掉它,因此,只有知道Google對Goldfish做了哪些具體改動之後才能正確地去掉。據統計,Android 內核對Goldfish的改動主要涉及44個文件,具體匯總如下。

說明 本書中在被改動的文件前面加了Chg標記,在新增的文件前面加了New標記。

1Chgarch/arm/Makefile添加CONFIG_ARCH_GOLDFISH

2Newarch/arm/configs/goldfish_defconfig默認配置文件

3Newarch/arm/mach-goldfish/Kconfig為Goldfish CPU添加Kernel配置文件

4Newarch/arm/mach-goldfish/Makefile添加board-goldfish.o

5Newarch/arm/mach-goldfish/Makefile.boot為Goldfish CPU進行啟動配置

6Newarch/arm/mach-goldfish/audio.c Audio的輸入/輸出

7Newarch/arm/mach-goldfish/board-goldfish.c中斷請求、輸入/輸出等

8Newarch/arm/mach-goldfish/pdev_bus.c設備匯流排

9Newarch/arm/mach-goldfish/pm.c電源管理

10Newarch/arm/mach-goldfish/switch.cSwitch控制

11Newarch/arm/mach-goldfish/timer.c獲取和設置時間

12Chgarch/arm/mm/Kconfig添加ARCH_GOLDFISH到支持列表

13Chgdrivers/char/Makefile添加goldfish_tty

14Newdrivers/char/goldfish_tty.cTTY驅動

15Chgdrivers/input/keyboard/Kconfig為Goldfish的鍵盤事件添加配置文件

16Chgdrivers/input/keyboard/Makefile添加goldfish_events事件

17Newdrivers/input/keyboard/goldfish_events.cGoldfish鍵盤驅動

18Chgdrivers/mmc/host/Kconfig添加Kernel配置選項Goldfish MMC卡

19Chgdrivers/mmc/host/Makefile添加Goldfish MMC卡驅動

20Newdrivers/mmc/host/goldfish.c多媒體驅動

21Chgdrivers/mtd/devices/Kconfig為Goldfish的NAND flash device添加Kernel配置選項

22Chgdrivers/mtd/devices/Makefile添加goldfish_nand

23Newdrivers/mtd/devices/goldfish_nand.cNAND flash驅動

24Newdrivers/mtd/devices/goldfish_nand_reg.hNAND flash驅動

25Chgdrivers/power/Kconfig為Goldfish的battery(電池)驅動添加kernel配置選項

26Chgdrivers/power/Makefile添加Goldfish電池

27Newdrivers/power/goldfish_battery.c能源和電池狀態驅動

28Chgdrivers/rtc/Kconfig為Goldfish的rtc(時鍾)驅動添加Kernel配置選項

29Chgdrivers/rtc/Makefile添加rtc-goldfish

30Newdrivers/rtc/rtc-goldfish.c實時時鍾驅動

31Chgdrivers/video/Kconfig添加Goldfish的framebuffer

32Chgdrivers/video/Makefile添加Goldfish的framebuffer

33Newdrivers/video/goldfishfb.cframebuffer驅動

34Newinclude/asm-arm/arch-goldfish/dma.h

35Newinclude/asm-arm/arch-goldfish/entry-macro.S

36Newinclude/asm-arm/arch-goldfish/hardware.h

37Newinclude/asm-arm/arch-goldfish/io.h

38Newinclude/asm-arm/arch-goldfish/irqs.h

39Newinclude/asm-arm/arch-goldfish/memory.h

40Newinclude/asm-arm/arch-goldfish/system.h

41Newinclude/asm-arm/arch-goldfish/timer.h

42Newinclude/asm-arm/arch-goldfish/timex.h

43Newinclude/asm-arm/arch-goldfish/uncompress.h

44Newinclude/asm-arm/arch-goldfish/vmalloc.h

2 、YAFFS2

不同於PC機(文件是存儲在硬碟上的),手機使用FLASH作為存儲介質。HTC的G1使用的是NANDFLASH這種存儲目前已經相當普及了,而且種類也頗多(如SLC、MLC等),存儲密度也越來越高(已經出現幾十GB大小的NANDFLASH),價格也越來越低。

YAFFS2是專門用在FLASH上的文件系統,YAFFS2是「Yet Another Flash File System,2nd edition」的縮寫。YAFFS2為Linux內核提供了一個高效訪問NANDFLASH的介面。但是NANDFLASH的支持並不包含在標準的2.6.25內核中,所以Google在其中添加了對NANDFLASH的支持。據統計,為了支持YAFFS2,Google一共改動和增加了以下35個文件:

1Chgfs/Kconfig添加YAFFS配置

2Chg fs/Makefile添加YAFFS

以下為新增的YAFFS2:

1Newfs/yaffs2/Kconfig18Newfs/yaffs2/yaffs_mtddif2.h

2Newfs/yaffs2/Makefile19Newfs/yaffs2/yaffs_nand.c

3Newfs/yaffs2/devextras.h20Newfs/yaffs2/yaffs_nand.h

4Newfs/yaffs2/moleconfig.h21Newfs/yaffs2/yaffs_nandemul2k.h

5Newfs/yaffs2/yaffs_checkptrw.c22Newfs/yaffs2/yaffs_packed1.c

6Newfs/yaffs2/yaffs_checkprtw.h23Newfs/yaffs2/yaffs_packed1.h

7Newfs/yaffs2/yaffs_ecc.c24Newfs/yaffs2/yaffs_packed2.c

8Newfs/yaffs2/yaffs_ecc.h25Newfs/yaffs2/yaffs_packed2.h

9Newfs/yaffs2/yaffs_fs.c26Newfs/yaffs2/yaffs_qsort.c

10Newfs/yaffs2/yaffs_getblockinfo.h27Newfs/yaffs2/yaffs_qsort.h

11Newfs/yaffs2/yaffs_guts.c28Newfs/yaffs2/yaffs_compat.c

12Newfs/yaffs2/yaffs_guts.h29Newfs/yaffs2/yaffs_compat.h

13Newfs/yaffs2/yaffs_mtdif.c30Newfs/yaffs2/yaffs_validitiy.c

14Newfs/yaffs2/yaffs_mtdif.h31Newfs/yaffs2/yaffs_validity.h

15Newfs/yaffs2/yaffs_mtddif1.c32Newfs/yaffs2/yaffsinterface.h

16Newfs/yaffs2/yaffs_mtddif1.h33Newfs/yaffs2/yportenv.h

17Newfs/yaffs2/yaffs_mtddif2.c

3、 藍牙

在藍牙通信協議棧里Google修改了10個文件。這些改動修復了一些與藍牙耳機相關的明顯的Bug,以及一些與藍牙調試和訪問控制相關的函數,具體如下所示。

1Chgdrivers/bluetooth/Kconfig添加HCI UART Debug

2Chgdrivers/bluetooth/hci_II.c如果HCI UART Debug定義在Kernel配置中,則添加BT_DBG()宏

3Chgnet/bluetooth/Kconfig添加配置選項L2CAP, HCI_CORE, HCI_SOCK,以及通用介面和語音

4Chgnet/bluetooth/af_bluetooth.c如果CONFIG_ANDROID_PARANOID_NETWORK被定義,則添加藍牙功能的安全檢查

5Chgnet/bluetooth/hci_event.c修正藍牙的加密Bug和增加語音的支持

6Chgnet/bluetooth/rfcomm/core.c修正Bug

7Chgnet/bluetooth/rfcomm/sock.c修復Bug

8Chgnet/bluetooth/sco.c禁用SCO鏈接

9Chginclude/net/bluetooth/hci_core.h禁用LMP_ESCO

10Chginclude/net/bluetooth/rfcomm.h在rfcomm_dlc中添加「out」參數

4 、調度器(Scheler)

Android內核還修改了與進程調度和時鍾相關的策略。只改動了5個文件,如下:

1Chgkernel/sched.c添加NORMALIZED_SLEEPER

2Chgkernel/sched_fair.c修改內核的調度方式

3Chgkernel/softirq.c修改為CPU調度

4Chgkernel/time/tick-sched.c修改為CPU調度

5Chginclude/linux/tick.h如果CONFIG_NO_HZ被定義,則添加tick_nohz_ update_ stopped_ sched_tick()

5、 Android新增的驅動

Android在Linux的基礎上新增了許多特有的驅動,如下所示。

1)IPC Binder 一種IPC(進程間通信)機制。它的進程能夠為其他進程提供服務通過標準的Linux系統調用API。IPC Binder的概念起源於一家名為Be.Inc的公司,在Google之前就已經被Palm軟體採用了。

2)Low Memory Killer 其實內核里已經有一個類似的功能,名稱為oom killer(out of memory killer)。當內存不夠的時候,該策略會試圖結束一個進程。

3)Ashmem 匿名共享內存。該功能使得進程間能夠共享大塊的內存。比如說,系統可以使用Ashmem保存一些圖標,多個應用程序可以訪問這個共享內存來獲取這些圖標。Ashmem為內核提供了一種回收這些使用完的共享內存塊的方法,如果某個進程試圖訪問這些已經被回收的內存塊,它將會得到錯誤的返回值,以便它重新進行內存塊分配和數據初始化。

4)RAM Console and Log Device 為了調試方便,Android添加了一個功能,使調試信息可以輸入到一個內存塊中。此外,Android還添加了一個獨立的日誌模塊,這樣用戶空間的進程就能夠讀寫日誌消息,以及調試列印信息等。

5)Android Debug Bridge 嵌入式設備的調試的確比較麻煩,為了便於調試,Google設計了這個調試工具,可以簡稱為ADB,使用USB作為連接方式,ADB可以看做是連接Android設備和PC機的一套協議。

除了這些主要的功能之外,Android還增加了諸如 real-time clock、switch、timed GPIO等功能,所有這些改動和增加包含在以下28個文件之中。

1Chgdrivers/Kconfig進入配置文件

2Chgdrivers/Makefile添加switch,驅動等

3Newdrivers/android/Kconfig添加BINDER_IPC、POWER、POWER_STAT、POWER_ ALARM、LOGGER、RAM_CONSOLE、TIMED_GPIO、PARANOID_NETWORK到配置中

4Newdrivers/android/Makefile添加binder.o、power.o、alarm.o、logger.o、ram_console.o、timed_gpio

5Newdrivers/android/alarm.c系統硬體時鍾和實時時鍾管理

6Newdrivers/android/binder.cIPC機制(Binder)

7Newdrivers/android/logger.cGoogle的日誌API

8Newdrivers/android/ram_console.cRAM控制台和日誌設備方便調試 [1]

9Newdrivers/android/timed_gpio.cGoogle的GPIO定時驅動

10Newdrivers/switch/Kconfig為GPIO添加配置選項

11Newdrivers/switch/Makefile引入GPIO驅動

12Newdrivers/switch/switch_class.c

13Newdrivers/switch/switch_gpio.c

14Chgdrivers/usb/gadget/Kconfig添加ADB配置選項

15Chgdrivers/usb/gadget/Makefile編譯ADB所需的配置選項

16Newdrivers/usb/gadget/android_adb.cADB驅動

17Newinclude/linux/android_aid.h添加AIDs、INET、networking

18Newinclude/linux/android_alarm.h時鍾功能設置

19Newinclude/linux/android_timed_gpio.hGPIO結構體

20Newinclude/linux/ashmem.hAndroid共享內存

21Newinclude/linux/binder.hBinder IPC API定義

22Newinclude/linux/logger.hLogger定義

23Newinclude/linux/switch.hGPIO switch介面

24Chgmm/Makefile添加ashmem.o

25Newmm/ashmem.c內存共享實現

26Chgdrivers/misc/Kconfig添加LOW_MEMORY_KILLER配置選項

27Chgdrivers/misc/Makefile添加lowmemorykiller.c

28Newdrivers/misc/lowmemorykiller.c當內存過低時,選擇並結束進程

6 、電源管理

電源管理(Power Management)對於移動設備來說相當重要,也是最為復雜和開發難度最高的一個功能。Google添加了一個新的電源管理系統,不包含原有的apm和dpm等。這項改動主要涉及以下5個文件:

1Newinclude/linux/android_power.h定義電源管理API

2Newdrivers/android/power.c電源管理API實現

3Chgdrivers/input/evdev.c修改Android電源處理方式

4Chgfs/inotify_user.c修改Android電源處理方式

5Chgkernel/power/process.c修改Android電源處理方式

7、 雜項
除了上述改動之外,還有一些小改動,如新增的額外調試功能、鍵盤背光控制、TCP 網路管理等,共涉及36個文件,詳見參考資料。

為了調試方便,Android 添加了一個功能,使得調試信息可以輸入到一個內存塊中。此外, Android 添加了一個獨立的日誌模塊,這樣用戶空間的進程能夠讀寫日誌消息,調試列印信息等。

閱讀全文

與android44api20相關的資料

熱點內容
實數四則運演算法則概念 瀏覽:292
cs16優化命令 瀏覽:869
Minecraft雲伺服器免費 瀏覽:826
png壓縮最小 瀏覽:180
老韓綜app怎麼看不了了 瀏覽:227
只有一個程序員的體驗 瀏覽:321
用伺服器地址怎麼有網 瀏覽:550
路由器伺服器昵稱是什麼 瀏覽:713
程序員男友消失了 瀏覽:399
程序員搜索框自動提示 瀏覽:26
android44api20 瀏覽:676
adb刷recovery命令 瀏覽:697
廣聯達正版加密鎖可以補辦嗎 瀏覽:945
java程序員一天多少行代碼 瀏覽:948
喪屍危機java 瀏覽:125
華為手機怎麼去除app標記未讀信息 瀏覽:856
java監控文件夾 瀏覽:807
群控伺服器主機怎麼轉變普通電腦 瀏覽:707
手機怎麼調整app大小 瀏覽:455
加密門禁卡揭秘 瀏覽:139