导航:首页 > 操作系统 > 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相关的资料

热点内容
实数四则运算法则概念 浏览:294
cs16优化命令 浏览:869
Minecraft云服务器免费 浏览:826
png压缩最小 浏览:180
老韩综app怎么看不了了 浏览:227
只有一个程序员的体验 浏览:321
用服务器地址怎么有网 浏览:550
路由器服务器昵称是什么 浏览:715
程序员男友消失了 浏览:399
程序员搜索框自动提示 浏览:26
android44api20 浏览:677
adb刷recovery命令 浏览:697
广联达正版加密锁可以补办吗 浏览:945
java程序员一天多少行代码 浏览:948
丧尸危机java 浏览:125
华为手机怎么去除app标记未读信息 浏览:856
java监控文件夹 浏览:807
群控服务器主机怎么转变普通电脑 浏览:707
手机怎么调整app大小 浏览:455
加密门禁卡揭秘 浏览:139