搜档网
当前位置:搜档网 › Ubuntu下Android源码修改、编译及运行、launcher定制

Ubuntu下Android源码修改、编译及运行、launcher定制

Ubuntu下Android源码修改、编译及运行、launcher定制
Ubuntu下Android源码修改、编译及运行、launcher定制

环境

Linux 版本:Ubuntu 11.04 (可由10.10的版本进行升级)64位系统

GCC版本:gcc version 4.5.2

Java版本:java version "1.6.0_26"

下载android源码前注意:

1、保证Ubuntu系统中的容量在80G左右,以保证足够的空间来存放android源码以及编译后的相关文件。

2、保证Ubuntu系统进行Internet访问。

联网方法:采用拨号进行连接。相关操作步骤如下所示:

1、虚拟机→设置→硬件→网络适配器→网络连接→桥接

2、启动Ubuntu系统,打开终端(在普通用户下),输入相关命令如下:

$ pppoeconf //打开后输入上网账号跟密码,确认保存

$ sudo pon dsl-provider //上网连接命令

经过这两个步骤后就可以进行上网了。

Android源码编译所依赖的tools

01.$ sudo apt-get update

02.$ sudo apt-get -y install git-core

03.$ sudo apt-get -y install gnupg

04.$ sudo apt-get -y install sun-java6-jdk flex

05.$ sudo apt-get -y install bison

06.$ sudo apt-get -y install gperf

07.$ sudo apt-get -y install libsdl-dev

08.$ sudo apt-get -y install libesd0-dev

09.$ sudo apt-get -y install libwxgtk2.6-dev

10.$ sudo apt-get -y install build-essential

11.$ sudo apt-get -y install zip

12.$ sudo apt-get -y install curl

13.$ sudo apt-get -y install libncurses5-dev

14.$ sudo apt-get -y install zlib1g-dev

15.$ sudo apt-get -y install valgrind

注意:(如果是32bit的系统的话,则要更改几个Android.mk文件)

01./external/clearsilver/cgi/Android.mk

02./external/clearsilver/java-jni/Android.mk

03./external/clearsilver/util/Android.mk

04./external/clearsilver/cs/Android.mk

用gedit打开,修改m64为m32即可

另外

将build/core/main.mk中的ifneq (64,$(findstring 64,$(build_arch)))修改为:

ifneq (i686,$(findstring i686,$(build_arch)))

对于32位系统所出现的问题,解决方法:

Error1:

make: ***

[out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] error 1

在terminal中输入

$ gedit frameworks/base/libs/utils/Android.mk

将LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)修改为:

LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) –fpermissive

Error2:

make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] error 1

此处编译错误是由于ubuntu 11.10采用了GCC4.6.1导致的

修改源码目录下/build/core/combo/HOST_linux-x86.mk

并将以下语句:

HOST_GLOBAL_CFLAGS

+= -D_FORTIFY_SOURCE=0

修改为:

HOST_GLOBAL_CFLAGS

+= -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0

Android源码下载

1、安装repo

安装过程步骤如下所示:

Repo下载安装

1、$ mkdir ~/bin //在home目录下创建bin文件夹

2、$ PATH=~/bin:$PA TH //环境变量设置

3、$ curl https://https://www.sodocs.net/doc/192777465.html,/dl/googlesource/git-repo/repo > ~/bin/repo //repo下载

4、$ chmod a+x ~/bin/repo //权限设置,保证repo可执行

Repo client初始化

1、$ mkdir Android //创建Android目录,用于存放下载的android源码

2、$ cd Android //进入到Android目录

3、$ repo init -u https://https://www.sodocs.net/doc/192777465.html,/platform/manifest //指定URL清单,指定包含在Android源代码的各种存储库将被安置在工作目录中

当然也可以指定android版本,使用如下命令:

$ repo init -u https://https://www.sodocs.net/doc/192777465.html,/platform/manifest -b android-4.0.1_r1

Android源码文件获取

$ repo sync

注意:在Android源码下载过程中凡出现问题,可以进入Android源码下载的相关官方网站https://www.sodocs.net/doc/192777465.html,/source/downloading.html 进行查看。

Android源码编译

环境初始化

1、$ source build/envsetup.sh

OR

$ . build/envsetup.sh

2、$ lunch full-eng //选择编译目标

Code编译

$ make -j4 //其中j4表示同时启动4个线程任务进行编译,可以直接使用make,这样就是最大程度使用线程数来进行编译

总结:到这里为止,android源码完成了编译过程,编译后,会在源码目录下的/out/target/product/generic/有三个镜像文件生成,分别是system.img、userdata.img以及ramdisk.img 。

注意:1、如果编译过程没有出问题,但是在/out/target/product/generic/下3个镜像文件不全,可以再次进行一次命令make,就可以解决问题了。

2、如果是编译过程中出现错误,一般导致的原因是因为缺少了相关编译环境,可以根据提示进行安装,安装后,重新进行编译。

Windows XP下使用Android模拟器运行所编译好的文件。

原理:将Android模拟器下所加载的system.img替换成编译后的system.img即可。

1、将编译好的system.img从Ubuntu中拷贝出来

方法:1)先拷贝到U盘或者移动硬盘中,再从U盘或移动硬盘拷贝到Windows XP

硬盘下;

2)先进行Windows XP跟Ubuntu文件夹共享,这样就可以将system.img拷贝到共享文件夹中;

3)传FTP,从FTP上进行下载;

4)在Ubuntu中上网将system.img作为附件进行邮件发送,然后从Windows XP下进行下载。

2、将拷贝出来的system.img文件放置到Android模拟器下的对于文件夹中,如果

Android是4.0以上的版本的话,一般是在system-imges文件夹中。C:\Program Files\Android\android-sdk\system-images\android-15\armeabi-v7a

3、启动模拟器就可以运行了。

注意:创建Android虚拟机的时候,Android版本应该跟Ubuntu下编译好的Android版本要保持一致,否则有可能替换system.img后,Android系统无法正常启动,或者无法进入Android 启动界面。

Android源码修改并进行编译

下面以2个实例来进行说明,实例1目的是实现Android系统永不休眠,实例2是实现Android系统启动后,不自动进入锁屏界面。

实例1:

实现Android系统永不休眠其实很简单,只需要对源码下的配置文件XML下的参数进行修改即可。步骤如下:

1、$ cd frameworks/base/packages/SettingsProvider/res/values //在下载的Android源码目录下输入此命令,进入到values目录下

2、$ gedit defaults.xml //使用文本编辑器打开defaults.xml文件

3、将60000改为-1保存后退出//其中60000单位是ms,表示60s,就是说60s屏幕会进行休眠状态,改为-1后,不再进入休眠

4、$ cd ../../../../../../ //返回到源码目录下

5、$ source ./build/envsetup.sh //环境初始化

6、$ mmm frameworks/base/packages/SettingsProvider/ //对SettingsProvider模块进行编译

7、$ make snod //重新打包system.img

到这里,模拟编译就完成了,查看效果的话,直接将Android模拟器下的system.img替换掉启动运行即可。

注意:mmm命令可以对模块进行编译,后面必须接上模块所在目录,查看某目录是否为一模块,就看当前目录下是否有Android.mk文件,如果有的话,就是模块。除了可以使用mmm 进行编译的话,还可以使用mm,但是mm是在当前目录下实行编译的,也就是模块目录下使用此命令。

实例2:

实现Android启动后不进入锁屏状态。修改KeyguardViewMediator.java文件下的变量,将其赋值改为false即可。步骤如下:

1、$ cd frameworks/base/policy/src/com/android/internal/policy/impl/ //在下载的Android 源码目录下输入此命令,进入到impl目录下

2、$ gedit KeyguardViewMediator.java //是用文本编辑器打开java文件

3、将private boolean mExternallyEnabled = true;代码中的true改为false,保存退出

4、$ cd ../../../../../../ ../../../ //返回到源码目录下

5、$ source ./build/envsetup.sh //环境初始化

6、$ mmm frameworks/base/policy/ //对policy模块进行编译

7、$ make snod //重新打包system.img

注意:如果在进行模块代码编译了,报出少了一个odex后缀名的文件的错误时,总结了下,导致报错的原因可能是Android版本的差异,不过没事,即使模块编译通不过,还是可以对整个源码进行编译的(直接在源码目录下执行make命令即可),只是时间会相对较长,同样会将修改的模块整合到system.img文件中。

Android 4.0下防止用户对安装程序进行卸载

打开源码目录找到packages/apps/PackageInstaller/src/com/android/packageinstaller/下的两个文件:

1、UninstallAppProgress.Java //程序卸载过程

2、UninstallerActivity.java //程序卸载界面

方法是在UninstallerActivity.java对应位置加上一段代码即可:

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

// Get intent information.

// We expect an intent with URI of the form package://#

// className is optional; if specified, it is the activity the user chose to uninstall

final Intent intent = getIntent();

Uri packageURI = intent.getData();

String packageName = packageURI.getEncodedSchemeSpecificPart();

if(packageName == null) {

Log.e(TAG, "Invalid package name:" + packageName);

showDialog(DLG_APP_NOT_FOUND);

return;

}

if(packageName.equals("cn.android.managerapp")){

/*AlertDialog.Builder builder= new AlertDialog.Builder(this);

//builder.setIcon(android.R.drawable.ic_dialog_info);

builder.setTitle("Message");

builder.setMessage("Cannot be uninstall!");

builder.setPositiveButton("确认", null);

//builder.create().show();

builder.show();

//showDialog(DLG_APP_NOT_FOUND);

//return;

finish();*/

new AlertDialog.Builder(this)

.setTitle("游戏控制")

.setMessage("对不起,此程序不允许卸载!")

.setPositiveButton("确定",

new DialogInterface.OnClickListener(){

public void onClick(DialogInterface dialoginterface, int i){

//这里设置点击后执行

finish();

}

}

)

.show();

}

mPm = getPackageManager();

boolean errFlag = false;

加上红色部分的代码,就可以对特定的安装程序进行控制了。其中cn.android.managerapp是指安装程序的进程名,效果就是弹出提示框,提醒用户程序不允许卸载。

Android 4.0下防止用户对安装程序进行强行停止

打开源码目录,到frameworks/base/services/java/com/android/server/am/目录下找到ActivityManagerService.java文件,并打开它。

可以对代码中两个地方进行控制,都可以达到强行停止的目的:

1、在forceStopPackage函数中,加上一段代码

2、public void forceStopPackage(final String packageName) {

3、if

(checkCallingPermission(android.Manifest.permission.FORCE_STOP_PACKAGES)

4、!= PackageManager.PERMISSION_GRANTED) {

5、String msg = "Permission Denial: forceStopPackage() from pid="

6、+ Binder.getCallingPid()

7、+ ", uid=" + Binder.getCallingUid()

8、+ " requires " +

android.Manifest.permission.FORCE_STOP_PACKAGES;

9、Slog.w(TAG, msg);

10、throw new SecurityException(msg);

11、}

12、final int userId = UserId.getCallingUserId();

13、long callingId = Binder.clearCallingIdentity();

14、try {

15、IPackageManager pm = AppGlobals.getPackageManager();

16、int pkgUid = -1;

17、synchronized(this) {

18、try {

19、pkgUid = pm.getPackageUid(packageName, userId);

20、} catch (RemoteException e) {

21、}

22、if (packageName == -1) {

23、Slog.w(TAG, "Invalid packageName: " + packageName);

24、return;

25、}

26、//添加判断代码

27、if(packageName.equals("cn.android.managerapp")){

28、return;

29、}

30、//

31、forceStopPackageLocked(packageName, pkgUid);

32、try {

33、pm.setPackageStoppedState(packageName, true, userId);

34、} catch (RemoteException e) {

35、} catch (IllegalArgumentException e) {

36、Slog.w(TAG, "Failed trying to unstop package "

37、+ packageName + ": " + e);

38、}

39、}

40、} finally {

41、Binder.restoreCallingIdentity(callingId);

42、}

43、}

方法二:这是在网上看到的方法,尝试了下,编译通过了,但是在模拟器上面运行的时候出问题

2、修改clearApplicationUserData函数

44、public boolean clearApplicationUserData(final String packageName,

45、final IPackageDataObserver observer, final int userId) {

46、enforceNotIsolatedCaller("clearApplicationUserData");

47、int uid = Binder.getCallingUid();

48、int pid = Binder.getCallingPid();

49、long callingId = Binder.clearCallingIdentity();

50、try {

51、IPackageManager pm = AppGlobals.getPackageManager();

52、int pkgUid = -1;

53、synchronized(this) {

54、try {

55、pkgUid = pm.getPackageUid(packageName, userId);

56、} catch (RemoteException e) {

57、}

58、if (pkgUid == -1) {

59、Slog.w(TAG, "Invalid packageName:" + packageName);

60、return false;

61、}

62、if(packageName.equals("cn.android.managerapp")){

63、AlertDialog.Builder builder = new AlertDialog.Builder(mContent);

64、builder.setTitle();

65、builder.setMessage(msg);

66、builder.setPositiveButton("OK",new

DialogInterface.OnClickListener(){

67、public void onClick(DialogInterface dialoginterface, int i){

68、//Click event

69、}

70、}

71、);

72、builder.create().show();

73、return false;

74、}

75、if (uid == pkgUid || checkComponentPermission(

76、

android.Manifest.permission.CLEAR_APP_USER_DA TA,

77、pid, uid, -1, true)

78、== PackageManager.PERMISSION_GRANTED) {

79、forceStopPackageLocked(packageName, pkgUid);

80、} else {

81、throw new SecurityException(pid+" does not have

permission:"+

82、

android.Manifest.permission.CLEAR_APP_USER_DA TA+" to clear data" +

83、"for process:"+packageName);

84、}

85、}

86、

87、try {

88、//clear application user data

89、pm.clearApplicationUserData(packageName, observer, userId);

90、Intent intent = new

Intent(Intent.ACTION_PACKAGE_DATA_CLEARED,

91、Uri.fromParts("package", packageName, null));

92、intent.putExtra(Intent.EXTRA_UID, pkgUid);

93、broadcastIntentInPackage("android", Process.SYSTEM_UID,

intent,

94、null, null, 0, null, null, null, false, false, userId);

95、} catch (RemoteException e) {

96、}

97、} finally {

98、Binder.restoreCallingIdentity(callingId);

99、}

100、return true;

101、}

Launcher 桌面定制

方法一:将系统的Launcher进行删除,使用自己编写的Launcher。

实现步骤:

1、编写自己的Launcher。例如:建立Jhome工程,修改工程下的AndroidManifest.xml文件,

如下所示:

// 主屏activity 属性设置

// Android activity属性设置大全https://www.sodocs.net/doc/192777465.html,/share/detail/44749420

android:name="https://www.sodocs.net/doc/192777465.html,ucher"

android:launchMode="singleTask"

android:clearTaskOnLaunch="true"

android:stateNotNeeded="true"

android:windowSoftInputMode="adjustPan"

android:screenOrientation="nosensor"

android:label="@string/title_activity_laucher" >

//以下两条代码一定要加上,表示Home Screen

//应用程序列表activity

android:name="https://www.sodocs.net/doc/192777465.html,uncher.listview.ListView"

android:finishOnCloseSystemDialogs="true"

android:process=":ListView"

android:label="@string/title_activity_laucher">

2、将写好的Launcher代码进行编译生成APK,将APK拷贝到Android源码下的

/out/target/product/generic/system/app/下;

3、修改Android下的Launcher配置文件AndroidManifest.xml,该文件在Android源码下

/packages/apps/Launcher2(或Launcher,根据版本不同有所差异),打开该目录下的AndroidManifest.xml文件,将以下两段代码删除或者注释掉即可。

4、编译Android源码,编译好后,就可以启动模拟器进行效果查看了。

方法二:实现唯一定制的Launcher,缺点:修改大,容易出问题。

实现步骤:

1、在Intent.java(frameworks/base/core/java/android/content/Intent.java)中添加两行代码

1. @SdkConstant(SdkConstantType.INTENT_CATEGORY)

2. public static final String CATEGORY_HOME_FIRST = “android.intent.category.HOME_FIRST”;

2、在frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中修改

1. //intent.addCategory(Intent.CATEGORY_HOME); 改成

intent.addCategory(Intent.CATEGORY_HOME_FIRST);

2.将该文件中出现的Intent.CA TEGORY_HOME换成Intent.CATEGORY_HOME_FIRST

3、在frameworks/base/policy/src/com/android/internal/policy/impl/ PhoneWindowManager.java 中修改

1.//mHomeIntent.addCategory(Intent.CATEGORY_HOME);

2.mHomeIntent.addCategory(Intent.CATEGORY_HOME_FIRST);

4、在frameworks/base/services/java/com/android/server/am/ ActivityRecord.java中修改

1. //if (Intent.ACTION_MAIN.equals(_intent.getAction()) &&

_intent.hasCategory(Intent.CA TEGORY_HOME) 2.if (Intent.ACTION_MAIN.equals(_intent.getAction()) &&

_intent.hasCategory(Intent.CA TEGORY_HOME_FIRST)

5、在

frameworks/base/policy/src/com/android/internal/policy/impl/

RecentApplicationsDialog.java中修改

1. // ActivityInfo homeInfo =

//new

Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME)

//.resolveActivityInfo(pm, 0);

2. ActivityInfo homeInfo =

new

Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME_FIRST)

.resolveActivityInfo(pm, 0);

6、在Android源码下可以使用grep -R ' CATEGORY_HOME ' frameworks 和命令grep -R ' CA TEGORY_HOME ' packages 找出在frameworks和packages目录下所有文件中出现CA TEGORY_HOME的文件路径罗列出,然后对每个文件中的CA TEGORY_HOME和category_HOME对应改成CA TEGORY_HOME_FIRST和category_HOME_FIRST;

主要有以下这些文件:

//改frameworks/base/docs/html/guide/components/intents-filters.jd: {@code CA TEGORY_HOME}

//改frameworks/base/api/13.xml:

//改frameworks/base/api/12.xml:

//改frameworks/base/api/4.xml:

//改frameworks/base/api/14.txt: field public static final https://www.sodocs.net/doc/192777465.html,ng.String CA TEGORY_HOME = "android.intent.category.HOME";

//改frameworks/base/api/8.xml:

//改frameworks/base/api/6.xml:

//改frameworks/base/api/11.xml:

//改frameworks/base/api/5.xml:

//改frameworks/base/api/16.txt: field public static final https://www.sodocs.net/doc/192777465.html,ng.String CA TEGORY_HOME = "android.intent.category.HOME";

//改frameworks/base/api/15.txt: field public static final https://www.sodocs.net/doc/192777465.html,ng.String CA TEGORY_HOME = "android.intent.category.HOME";

//改frameworks/base/api/7.xml:

//改frameworks/base/api/3.xml:

//改frameworks/base/api/9.xml:

//改frameworks/base/api/2.xml:

//改frameworks/base/api/10.xml:

//改frameworks/base/api/current.txt: field public static final https://www.sodocs.net/doc/192777465.html,ng.String CA TEGORY_HOME = "android.intent.category.HOME";

//改frameworks/base/api/current.txt: field public static final https://www.sodocs.net/doc/192777465.html,ng.String

CA TEGORY_HOME_FIRST = "android.intent.category.HOME_FIRST";

//改frameworks/base/api/1.xml:

//改frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java: //mHomeIntent.addCategory(Intent.CATEGORY_HOME);

//改frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java: mHomeIntent.addCategory(Intent.CA TEGORY_HOME_FIRST);

//改frameworks/base/policy/src/com/android/internal/policy/impl/RecentApplicationsDialog.java: //new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME)

//改frameworks/base/policy/src/com/android/internal/policy/impl/RecentApplicationsDialog.java: new Intent(Intent.ACTION_MAIN).addCategory(Intent.CA TEGORY_HOME_FIRST)

//改frameworks/base/services/java/com/android/server/UiModeManagerService.java: category = Intent.CATEGORY_HOME;

//改frameworks/base/services/java/com/android/server/UiModeManagerService.java: homeIntent = buildHomeIntent(Intent.CATEGORY_HOME);

//改frameworks/base/services/java/com/android/server/am/ActivityRecord.java: _intent.hasCategory(Intent.CATEGORY_HOME) &&

//改frameworks/base/services/java/com/android/server/am/ActivityRecord.java: _intent.hasCategory(Intent.CATEGORY_HOME_FIRST) &&

//改frameworks/base/services/java/com/android/server/am/ActivityManagerService.java: //intent.addCategory(Intent.CA TEGORY_HOME);

//改frameworks/base/services/java/com/android/server/am/ActivityManagerService.java: intent.addCategory(Intent.CATEGORY_HOME_FIRST);

//改frameworks/base/services/java/com/android/server/am/ActivityManagerService.java: /*if (intent.getCategories() != null && intent.getCategories().contains(Intent.CATEGORY_HOME)) {

//改frameworks/base/services/java/com/android/server/am/ActivityManagerService.java:if (intent.getCategories() != null && intent.getCategories().contains(Intent.CATEGORY_HOME_FIRST)) {

//改frameworks/base/packages/SystemUI/src/com/android/systemui/recent/RecentTasksLoader.java: homeInfo = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME)

//改frameworks/base/packages/SystemUI/src/com/android/systemui/recent/RecentTasksLoader.java: .addCategory(Intent.CA TEGORY_HOME).resolveActivityInfo(pm, 0);

//改frameworks/base/core/java/android/content/Intent.java: *

  • {@link #ACTION_MAIN} with category {@link #CATEGORY_HOME} --

    //改frameworks/base/core/java/android/content/Intent.java: *

  • {@link #CATEGORY_HOME}

    //改frameworks/base/core/java/android/content/Intent.java: //添加CA TEGORY_HOME_FIRST

    //改frameworks/base/core/java/android/content/Intent.java: public static final String CA TEGORY_HOME_FIRST = "android.intent.category.HOME_FIRST";

    //改frameworks/base/core/java/android/content/Intent.java: public static final String CA TEGORY_HOME = "android.intent.category.HOME";

    //改frameworks/base/tests/SmokeTest/tests/src/com/android/smoketest/ProcessErrorsTest.java: mHomeIntent.addCategory(Intent.CA TEGORY_HOME);

    //改frameworks/base/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java: intent.addCategory(Intent.CATEGORY_HOME);

    //改packages/apps/Settings/src/com/android/settings/applications/InstalledAppDetails.java: intent.addCategory(Intent.CATEGORY_HOME);

    //改packages/apps/Phone/src/com/android/phone/OtaUtils.java: intent.addCategory (Intent.CATEGORY_HOME);

    //改packages/apps/Protips/src/com/android/protips/ProtipWidget.java: .addCategory(Intent.CA TEG ORY_HOME));

    7、将写好的桌面定制apk放入到out/target/product/generic/system/app/目录下

    注意:写Launcher的AndroidManifest.xml文件的Home Sreen的activity需要这样设置。

    8、将源码中与Launcher有关的部分全部删除掉

    包括源代码

    (packages/apps/Launcher)和apk(/out/target/product/generic/system/app/Launcher.apk)

    8、对修改的模块进行编译,最后再进行make snod重新进行system.img打包

    注意:如果make出现以下错误:

    1.******************************

    2.You have tried to change the API from what has been previously approved.

    3.

    4.To make these errors go away, you have two choices:

    5. 1) You can add "@hide" javadoc comments to the methods, etc. listed

    6.in the

    7. errors above.

    8.

    9. 2) You can update current.xml by executing the following commands:

    10.

    11. p4 edit frameworks/base/api/current.xml

    12. make update-api

    13.

    14. To check in the revised current.xml, you will need OWNERS

    15.approval.

    16.******************************

    如果自己添加了Android API 那么编译系统会出现此错误,解决办法:

    先make update-api 然后再make -j4 直接就可编译成功

    Ubuntu下Android源码修改、编译及运行、launcher定制

    环境 Linux 版本:Ubuntu 11.04 (可由10.10的版本进行升级)64位系统 GCC版本:gcc version 4.5.2 Java版本:java version "1.6.0_26" 下载android源码前注意: 1、保证Ubuntu系统中的容量在80G左右,以保证足够的空间来存放android源码以及编译后的相关文件。 2、保证Ubuntu系统进行Internet访问。 联网方法:采用拨号进行连接。相关操作步骤如下所示: 1、虚拟机→设置→硬件→网络适配器→网络连接→桥接 2、启动Ubuntu系统,打开终端(在普通用户下),输入相关命令如下: $ pppoeconf //打开后输入上网账号跟密码,确认保存 $ sudo pon dsl-provider //上网连接命令 经过这两个步骤后就可以进行上网了。 Android源码编译所依赖的tools 01.$ sudo apt-get update 02.$ sudo apt-get -y install git-core 03.$ sudo apt-get -y install gnupg 04.$ sudo apt-get -y install sun-java6-jdk flex 05.$ sudo apt-get -y install bison 06.$ sudo apt-get -y install gperf 07.$ sudo apt-get -y install libsdl-dev 08.$ sudo apt-get -y install libesd0-dev 09.$ sudo apt-get -y install libwxgtk2.6-dev 10.$ sudo apt-get -y install build-essential 11.$ sudo apt-get -y install zip 12.$ sudo apt-get -y install curl 13.$ sudo apt-get -y install libncurses5-dev 14.$ sudo apt-get -y install zlib1g-dev 15.$ sudo apt-get -y install valgrind 注意:(如果是32bit的系统的话,则要更改几个Android.mk文件) 01./external/clearsilver/cgi/Android.mk 02./external/clearsilver/java-jni/Android.mk 03./external/clearsilver/util/Android.mk 04./external/clearsilver/cs/Android.mk 用gedit打开,修改m64为m32即可 另外 将build/core/main.mk中的ifneq (64,$(findstring 64,$(build_arch)))修改为: ifneq (i686,$(findstring i686,$(build_arch)))

    Android Hotfix 新方案——Amigo 源码解读

    Android Hotfix 新方案——Amigo 源码解读 首先我们先来看看如何使用这个库。 用法 在project 的build.gradle中 dependencies { classpath 'me.ele:amigo:0.0.3' } 在module 的build.gradle中 apply plugin: 'me.ele.amigo' 就这样轻松的集成了Amigo。 生效补丁包 补丁包生效有两种方式可以选择: ? 稍后生效补丁包 ? 如果不想立即生效而是用户第二次打开App 时才打入补丁包,则可以将新的Apk 放到/data/data/{your pkg}/files/amigo/demo.apk,第二次打开时就会自动生效。可以通过这个方法 ? File hotfixApk = Amigo.getHotfixApk(context); ?

    获取到新的Apk。 同时,你也可以使用Amigo 提供的工具类将你的补丁包拷贝到指定的目录当中。 ? FileUtils.copyFile(yourApkFile, amigoApkFile); ? ? 立即生效补丁包 ? 如果想要补丁包立即生效,调用以下两个方法之一,App 会立即重启, 并且打入补丁包。 ? Amigo.work(context); ? Amigo.work(context, apkFile); ? 删除补丁包 如果需要删除掉已经下好的补丁包,可以通过这个方法 Amigo.clear(context); 提示:如果apk 发生了变化,Amigo 会自动清除之前的apk。 自定义界面 在热修复的过程中会有一些耗时的操作,这些操作会在一个新的进程中的Activity 中执行,所以你可以通过以下方式来自定义这个Activity。

    Ubuntu编译安装Linux内核过程(整理版)

    Ubuntu编译Linux内核过程 一、首先解决Ubuntu代理上网的问题 1、这种方法要用到/etc/apt/文件夹下的apt.conf文件。如果您希望apt-get(而不是其他应用程序)一直使用http代理,您可以使用这种方式。 注意:某些情况下,系统安装过程中没有建立apt配置文件。下面的操作将视情况修改现有的配置文件或者新建配置文件。 sudo gedit /etc/apt/apt.conf在您的apt.conf文件中加入下面这行(根据你的实际情况替换yourproxyaddress和proxyport)。Acquire::http::Proxy "http://yourproxyaddress:proxyport";保存apt.conf文件。 如果代理服务器需要登录,那么可以在指定代理服务器地址的时候,用如下格式(根据情况把username,password, yourproxyaddress 和proxyport替换为相应内容): http_proxy=http://username:password@yourproxyaddress:proxyp ort 2、然后在新立得设置http代理,在系统--系统管理--新立得软件包管理器--设置--首选项--网络里也要设置http的代理 二、下载源代码和编译软件的准备 下载内核源代码:https://www.sodocs.net/doc/192777465.html,/ 注意,点击2.6.39.3内核的F版,即完整版。

    如果你懒得去网站点联接,运行下列命令: 代码: $cd ~ $wget https://www.sodocs.net/doc/192777465.html,/pub/linux/kernel/v2.6/linux-2.6.39.3. tar.bz2 安装有关编译程序。安装make ,gcc, make-kpkg,运行menuconfig 等等和编译内核相关的工具。 安装不了,请检查/etc/apt/sources.list 文件。 安装所需工具包有关命令: 代码: $sudo apt-get install build-essential kernel-package libncurses5-dev fakeroot 三、解压源代码 注意,网上很多教程上说应该解压到 /usr/src,纯属以讹传讹,linux掌门人linus说解压到任何目录上都可以。当然,linus的说法是正确的。先将压缩包复制到usr/src目录下,然后将压缩包解压到user/src目录下。 如果压缩包现在放在个人主目录的桌面上,则运行下列命令: 代码: $sudo cp Desktop/linux-2.6.39.3.tar.bz2 /usr/src

    Android源码下载方法详解

    Android: Android源码下载方法详解 分类:Android平台 安卓源码下载地址:https://www.sodocs.net/doc/192777465.html,/source/downloading.html 相信很多下载过内核的人都对这个很熟悉 git clone git://https://www.sodocs.net/doc/192777465.html,/kernel/common.git kernel 但是这是在以前,现在如果这么执行的话,会显示如下内容 Initialized empty Git repository in /home/star/working/kernel/.git/ https://www.sodocs.net/doc/192777465.html,[0: 149.20.4.77]: errno=Connection refused fatal: unable to connect a socket (Connection refused) 通过浏览器输入https://www.sodocs.net/doc/192777465.html,/,发现该网站已经被重定向为 https://www.sodocs.net/doc/192777465.html,/source/downloading.html 可以在该页面的最后发现内核的下载方法。 下面我们介绍一下Android源码下载的步骤。 工作环境: 操作系统:Ubuntu 10.04 或Ubuntu10.10 git程序:1.7.0.4 或1.7.1 转载请注明出处:https://www.sodocs.net/doc/192777465.html,/pku_android 方法一: 1.1 初始化安装环境 参考网页https://www.sodocs.net/doc/192777465.html,/source/initializing.html 主要要做的就是安装jdk和安装一些软件包 $ sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \ libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \ libxml2-utils 如果已经安装了,就不许要这步了 1.2 无论下载内核和源码,都需要进行如下操作 参考网页https://www.sodocs.net/doc/192777465.html,/source/downloading.html $ mkdir ~/bin $ PATH=~/bin:$PATH $ curl https://https://www.sodocs.net/doc/192777465.html,/dl/googlesource/git-repo/repo > ~/bin/repo 如果出现: repo init error: could not verify the tag 'v1.12.7',

    Android系统编译过程中常见问题汇总(2)

    android源码编译常见问题 分类:android中级2013-03-09 16:20 397人阅读评论(2) 收藏举报编译过程: (在Ubuntu 11.04 64位机器上编译) 1. source build/envsetup.sh //初始化与环境envsetup.sh脚本 初始化完成,显示如下 including device/samsung/maguro/vendorsetup.sh including device/samsung/tuna/vendorsetup.sh including device/ti/panda/vendorsetup.sh including sdk/bash_completion/adb.bash 2. lunch full-eng //选择的目标 ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=4.0.1 TARGET_PRODUCT=full TARGET_BUILD_VARIANT=eng TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=arm TARGET_ARCH_VARIANT=armv7-a HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=ITL41D ============================================ //建立与一切使。GNU的make -JN参数可以并行处理任务,它是共同使用的任务数, //N的1倍和2倍之间是被用于建立计算机硬件线程数量。例如在E5520双机(2个CPU, //每个CPU 4核,每核心2线程),最快的构建与命令之间的J16和 -J32。 3. make -j4 编译完成

    Android源代码结构分析

    目录 一、源代码结构 (2) 第一层次目录 (2) bionic目录 (3) bootloader目录 (5) build目录 (7) dalvik目录 (9) development目录 (9) external目录 (13) frameworks目录 (19) Hardware (20) Out (22) Kernel (22) packages目录 (22) prebuilt目录 (27) SDK (28) system目录 (28) Vendor (32)

    一、源代码结构 第一层次目录 Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,代码包经过解压缩后,第一级别的目录和文件如下所示: . |-- Makefile (全局的Makefile) |-- bionic (Bionic含义为仿生,这里面是一些基础的库的源代码) |-- bootloader (引导加载器),我们的是bootable, |-- build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具) |-- dalvik (JAVA虚拟机) |-- development (程序开发所需要的模板和工具) |-- external (目标机器使用的一些库) |-- frameworks (应用程序的框架层) |-- hardware (与硬件相关的库) |-- kernel (Linux2.6的源代码) |-- packages (Android的各种应用程序) |-- prebuilt (Android在各种平台下编译的预置脚本) |-- recovery (与目标的恢复功能相关) `-- system (Android的底层的一些库)

    在Ubuntu上编译android

    在Ubuntu7.10上编译android 1 概述 上个星期看到android开放源代码的消息,虽然觉得Google的这个动作会对业界产生很大影响,但没有时间仔细看,只浏览了Project layout。今天上午一个网友在mail中说已经编译、运行过android。我趁着中午休息时间,在一个Ubuntu7.10的虚拟机上编译、运行了一下。 我在这个虚拟机上编译过openmoko、poky。相对于这两个使用OpenEmbedded的平台,android的编译要简单一些,快一些。我在编译openmoko和poky时,将所有下载包都保存在一个目录中,将编译目录的sources子目录指向这个目录。这样做,一方面即使以后有些链接失效,也还可以编起来(其实编译时都不需要连接外网);另一方面在重新编译时,不用重新下载,可以加快编译速度。即使这样,完全编译一次poky也要一个晚上。编译android时,下载用了1个小时,编译也只需要1个小时。 2 编译中的两个小问题 2.1 python和JDK Google网站对编译过程的介绍还是很清晰的。不过在介绍其它软件包时,都给出了apt-get命令,却单独给出了python和JDK的链接地址,容易对读者产生误导,以为要手工安装这两个软件。其实这两个软件也应该通过apt-get安装。特别是python,如果从源代码安装,可能因为依赖其它软件,导致一些组件编译失败,影响android的编译。而且python 2.6的源代码包没有提供make uninstall,卸载也比较麻烦。其实我们只需要一个apt-get命令,就可以安装所有依赖的软件。 2.2 "fatal: git 1.5.4 or later required" 在Ubuntu7.10上执行repo init时,会出现"fatal: git 1.5.4 or later required"的错误提示。在Ubuntu8.04上编译没有这个问题。下面的流程里会介绍怎样解决这个问题。 3 在Ubuntu7.10上的编译流程

    Android USB 驱动分析

    Android USB 驱动分析 一、USB驱动代码架构和使用 1、代码简介 USB驱动代码在/drivers/usb/gadget下,有三个文件:android.c, f_adb.c, f_mass_storage.c;g_android.ko 是由这三个文件编译而来,其中android.c 依赖于 f_adb.c 和 f_mass_storage.c(这两个文件之间无依赖关系)。 可在android.c中看到: static int __init android_bind_config(struct usb_configuration *c) { struct android_dev *dev = _android_dev; int ret; printk(KERN_DEBUG "android_bind_config\n"); ret = mass_storage_function_add(dev->cdev, c, dev->nluns); if (ret) return ret; return adb_function_add(dev->cdev, c); } 2、驱动使用 要使USB mass storage连接到主机: 打开/sys/devices/platform/usb_mass_storage/lun0/file文件,向 file文件写入一个存储 设备的路径,例如/dev/block/vold/179:0 (major:minor)路径; 这里的usb_mass_storage根据实际应用可以改的,由 platform_device_register函数的参数决 定。 例如: static struct platform_device fsg_platform_device = { .name = "usb_mass_storage", .id = -1, }; static void __init tegra_machine_init(void) { .... (void) platform_device_register(&fsg_platform_device); .... }

    如何安装Linux内核源代码

    如何获取Linux内核源代码 下载Linux内核当然要去官方网站了,网站提供了两种文件下载,一种是完整的Linux 内核,另一种是内核增量补丁,它们都是tar归档压缩包。除非你有特别的原因需要使用旧版本的Linux内核,否则你应该总是升级到最新版本。 使用Git 由Linus领头的内核开发队伍从几年前就开始使用Git版本控制系统管理Linux内核了(参考阅读:什么是Git?),而Git项目本身也是由Linus创建的,它和传统的CVS不一样,Git是分布式的,因此它的用法和工作流程很多开发人员可能会感到很陌生,但我强烈建议使用Git下载和管理Linux内核源代码。 你可以使用下面的Git命令获取Linus内核代码树的最新“推送”版本: $ git clone git://https://www.sodocs.net/doc/192777465.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 然后使用下面的命令将你的代码树与Linus的代码树最新状态同步: $ git pull 安装内核源代码 内核包有GNU zip(gzip)和bzip2格式。Bzip2是默认和首选格式,因为它的压缩比通常比gzip更好,bzip2格式的Linux内核包一般采用linux-x.y.z.tar.bz2形式的文件名,这里的x.y.z是内核源代码的具体版本号,下载到源代码包后,解压和抽取就很简单了,如果你下载的是bzip2包,运行: $ tar xvjf linux-x.y.z.tar.bz2 如果你下载的是gzip包,则运行: $ tar xvzf linux-x.y.z.tar.gz 无论执行上面哪一个命令,最后都会将源代码解压和抽取到linux-x.y.z目录下,如果你使用Git下载和管理内核源代码,你不需要下载tar包,只需要运行git clone命令,它就会自动下载和解压。 内核源代码通常都会安装到/usr/src/linux下,但在开发的时候最好不要使用这个源代码树,因为针对你的C库编译的内核版本通常也链接到这里的。 应用补丁

    android4.1编译

    Android 4.1.4 编译 1、下载源码: 我是在ics版本的基础上通过repo sync更新,发现有了an droid 4_1_r1的分支,等待更新完,repobranch切换分支,然后.Build/envsetup.she然后lunchi选择full-eng最后make,过一会报错。提示: build/core/product_config.mk:193:***_nic.PRODUCTS.[[build/target/product/v box_x 86.mk]]: "frameworks/native/build/phone-xhdpi-1024-dalvik-heap.mk" does not exist. Stop.** Don't have a product spec for: 'full' ** Do you have the right repo manifest? Google baidu bing 了大半天终于在an droid的bug单中找到了这条bug,解答是源码不全。愁了半天,repo sync都是最新的,愁了半天,最后再ics的repo 中重新下了个android 4.1.4的分支。 repoinit-uhttps: 4.1.1_r4 repo sync 下载3个小时,终于下载完成,本来下载源码需要很长时间5?10个小 时,由于再ics的基础上下载,只需要把patch下载就行了(repo会自动完成)。兴奋啊,赶紧. Build/envsetup.sh lunch 1 full-eng

    /bin/bash: prebuilts/gcc/linux-x86/arm/arm-linux-androideabi- 4.6/bin/arm-linux- androideabi-gcc: 无法执行二进制文件 /bin/bash: prebuilts/gcc/linux-x86/arm/arm-linux-androideabi- 4.6/bin/arm-linux- androideabi-gcc: 无法执行二进制文件 /bin/bash: prebuilts/gcc/linux-x86/arm/arm-linux-androideabi- 4.6/bin/arm-linux- androideabi-gcc: 无法执行二进制文件 先没管它,继续机制行 make clean make -j8 过了几分钟提示错误:hostStaticLib: libhost(out/host/linux- x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a) ERROR: prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux-glibc 2.7- 4.6/bin/x86_64-linux-ar only run on 64-bit linux make: ***[out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a] 错误 1 host C: emulator-target-i386 <= external/qemu/cpus.c host C: emulator-target-i386 <= external/qemu/arch_init.c host C: emulator-target-i386 <= external/qemu/os-posix.c host C:

    Android 串口编程原理和实现方式附源码

    提到串口编程,就不得不提到JNI,不得不提到JavaAPI中的文件描述符类:。下面我分别对JNI、以及串口的一些知识点和实现的源码进行分析说明。这里主要是参考了开源项目android-serialport-api。 串口编程需要了解的基本知识点:对于串口编程,我们只需对串口进行一系列的设置,然后打开串口,这些操作我们可以参考串口调试助手的源码进行学习。在Java中如果要实现串口的读写功能只需操作文件设备类:即可,其他的事都由驱动来完成不用多管!当然,你想了解,那就得看驱动代码了。这里并不打算对驱动进行说明,只初略阐述应用层的实现方式。 (一)JNI: 关于JNI的文章网上有很多,不再多做解释,想详细了解的朋友可以查看云中漫步的技术文章,写得很好,分析也很全面,那么在这篇拙文中我强调3点: 1、如何将编译好的SO文件打包到APK中?(方法很简单,直接在工程目录下新建文件夹libs/armeabi,将SO文件Copy到此目录即可) 2、命名要注意的地方?(在编译好的SO文件中,将文件重命名为:lib即可。其中是编译好后生成的文件) 3、MakeFile文件的编写(不用多说,可以直接参考package/apps目录下用到JNI的相关项目写法) 这是关键的代码: [cpp]view plaincopy

    (二):

    文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄,该结构表示开放文件、开放套接字或者字节的另一个源或接收者。文件描述符的主要实际用途是创建一个包含该结构的或。这是API的描述,不太好理解,其实可简单的理解为:就是对一个文件进行读写。 (三)实现串口通信细节 1) 建工程:SerialDemo包名:org.winplus.serial,并在工程目录下新建jni和libs两个文件夹和一个org.winplus.serial.utils,如下图: 2) 新建一个类:SerialPortFinder,添加如下代码: [java]view plaincopy 1.package org.winplus.serial.utils; 2. 3.import java.io.File; 4.import java.io.; 5.import java.io.IOException; 6.import java.io.LineNumberReader; 7.import java.util.Iterator; 8.import java.util.Vector; 9. 10.import android.util.Log; 11. 12.public class SerialPortFinder { 13. 14.private static final String TAG = "SerialPort"; 15.

    android源代码下载和编译教程

    Android源代码由两部分组成,其一是Android系统应用部分的代码,其次是Android 所使用的内核代码,如果针对Google Nexus S来开发ROM,就需要下载三星的内核代码Android 系统应用代码: https://https://www.sodocs.net/doc/192777465.html,/platform/manifest Android内核代码: https://https://www.sodocs.net/doc/192777465.html,/kernel/samsung.git 准备阶段:设置Linux编译环境(本人是Ubuntu 11.10 ,32位系统),一般你需要以下配置: Python 2.5 -- 2.7. GNU Make 3.81 -- 3.82,, JDK 6 (for Gingerbread or newer); JDK 5( for Froyo or older). Git 1.7 or newer. 1、安装一些必备的包。 Git是Linux Torvalds为了帮助管理Linux内核而开发的一个开放源码的分布式版本控制系统软件,它不同于SVN,CVS这样集中式的版本控制系统。在集中式版本控制系统中只有一个仓库(repository),许多个工作目录,而git这样的分布式控制系统中,每一个工作目录都包含一个完整仓库,它们支持离线工作,本地提交可以稍后提交到服务器上。分布式系统理论上也比集中式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而收到影响? 因为Android是由kernel,Dalvik,Bionic,prebuild,build等多个Git项目组成, 所以Android项目编写了一个名为repo的python的脚本来统一管理这些项目的仓库,使得Git的使用更加简单。 $ sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \ x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \ libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \ libxml2-utils xsltproc $ sudo apt-get install libx11-dev:i386 2、创建源代码目录 首先确保在当前用户的主目录下创建一个/bin目录(如果没有的话),然后把它加到PATH 环境变量中: $ mkdir ~/bin $ PATH=~/bin:$PATH 或者$export PATH=$PATH:~/bin 3、用curl下载repo脚本,并保存在~/bin/repo文件中: $ curl https://https://www.sodocs.net/doc/192777465.html,/dl/googlesource/git-repo/repo > ~/bin/repo 为repo加上执行权限 $ chmod a+x ~/bin/repo 4、初始化版本库 首先建立一个目录,用来存放下载下来的东西 $mkdir MyAndroid $cd MyAndroid 以后,执行如下命令 $ repo init -u https://https://www.sodocs.net/doc/192777465.html,/platform/manifest -b android-2.3.7_r1 我这里下载的是android2.3.7版本的,所用的参数是android-2.3.7_r1。由于最新的是android-4.0.3_r1,所以使用上面即可下载2.3.7的源代码 注意:如果要是把所有的版本都下载下来,那时间是需要很久很久的,需要耐心等待,但是如果仅仅是下载某一个版本的话,还是很快就可以了。 最后,如果看到repo initialized in /MyAnroid的提示,说明本地的版本库已经初始化成功了(期间需要你填写姓名和Gmail地址)。

    App工程结构搭建:几种常见Android代码架构分析

    App工程结构搭建:几种常见Android代码架构分析 关于Android架构,因为手机的限制,目前我觉得也确实没什么大谈特谈的,但是从开发的角度,看到整齐的代码,优美的分层总是一种舒服的享受的。 从艺术的角度看,其实我们是在追求一种美。 本文先分析几个当今比较流行的android软件包,最后我们汲取其中觉得优秀的部分,搭建我们自己的通用android工程模板。 1. 微盘 微盘的架构比较简单,我把最基本,最主干的画了出来: 第一层:com.sina.VDisk:com.sina(公司域名)+app(应用程序名称) 。 第二层:各模块名称(主模块VDiskClient和实体模块entities)第三层:各模块下具体子包,实现类。 从图中我们能得出上述分析中一个最简单最经典的结构,一般在应用程序包下放一些全局的包或者类,如果有多个大的模块,可以分成多个包,其中包括一个主模块。 在主模块中定义基类,比如BaseActivity等,如果主模块下还有子模块,可以在主模块下建立子模块相应的包。说明一点,有的时候如果只有一个主模块,我们完全可以省略掉模

    块这一层,就是BaseActivity.java及其子模块直接提至第二层。 在实体模块中,本应该定义且只定义相应的实体类,供全局调用(然而实际情况可能不是这样,后面会说到)。在微盘应用中,几乎所有的实体类是以xxx+info命名的,这种命名也是我赞成的一种命名,从语义上我觉得xxxModel.java这种命名更生动更真实,xxxModel给我一种太机械太死板的感觉,这点完全是个人观点,具体操作中以个人习惯为主。还有一点,在具体的xxxInfo,java中有很多实体类中是没有get/set的方法,而是直接使用public的字段名。这一点,我是推荐这种方式的,特别是在移动开发中,get/set方法很多时候是完全没有必要的,而且是有性能消耗的。当然如果需要对字段设置一定的控制,get/set方法也是可以酌情使用的。 2. 久忆日记 相比于微盘的工程结构,久忆日记的结构稍微复杂了一些。如下图: 1).第一层和前面微盘一样的. 2).第二层则没有模块分类,直接把需要的具体实现类都放在下面,主要日记的一些日记相关的Activity。 3).第二层的实体包命令为model包,里面不仅存放了实体类

    在ubuntu 10.10(2.6.35.22) 编译安装linux-2.6.35.13内核

    在ubuntu 10.10(2.6.35.22) 编译安装linux-2.6.35.13内核 第一步:准备工作 打开终端获得root权限:sudo su 然后安装编译内核时需要的工具: apt-get install build-essential kernel-package libncurses5-dev libqt3-headers build-essential (基本的编程库(gcc, make等) kernel-package (Debian 系统里生成 kernel-image 的一些配置文件和工具) libncurses5-dev (make menuconfig要调用的) libqt3-headers (make xconfig要调用的) 其他工具在升级过程中可以按提示安装 第二步:到https://www.sodocs.net/doc/192777465.html,下载内核源代码linux-2.6.35.13.tar.gz 假设下载在root目录(具体路径个人喜好),然后解压到/usr/src/linux-2.6.35.13目录里 tar zxvf /root/linux-2.6.35.13.tar.gz -C /usr/src 解压后会在/usr/src生成新文件夹linux-2.6.35.13 第三步:配置 把正在使用中的内核配置文件/usr/src/linux-headers-2.6.35-22-generic/.config 拷到/usr/src/linux-2.6.35.13目录下 cp /usr/src/linux-headers-2.6.35-22-generic/.config /usr/src/linux-2.6.35.13 执行: cd /usr/src/linux-2.6.35.13 make menuconfig 终端会弹出一个配置界面,注意主菜单最后有两项: Load an Alternate Configuration File Save an Alternate Configuration File 先选Load an Alternate Configuration File,意思是利用当前的内核配置详单来设置将要编译的内核,然后选Save an Alternate Configuration File,最后退出配置界面。 第四步:开如编译安装新内核 //执行:sudo make mrproper (清除以前曾经编译过的旧文件,如果你是第一次编译,可不执行) //上面这个操作会把前面拷贝的.config干掉,所以。。。你懂的。。。 执行:sudo make(编译,可以加-j4,如果你CPU是双核心,够牛的话,因为可以提高速度) 然后:sudo make install(安装内核文件到/boot目录,安装过程会自动修改GRUB启动菜单) 再:sudo make modules(编译内核需要的模块) 再:sudo make modules_install(安装模块到/lib/modules目录) 最后创建initrd文件: mkinitramfs -o /boot/initrd.img-2.6.35.13

    Android_4.2_源码下载和编译环境安装及Android_4.2_源码编译

    Android 4.2源码的下载和编译环境的安装及源码的编译Google于2012.11.14发布了Android4.2的源码,下面把本人在ubuntu10.04 的64位 系统上下载源码,和编译源码做个记录备份,也供有需要的人参考,若是在下载编译安装Android源代码遇到问题,可加QQ群交流: 217706590,难免有错,敬请见谅,还忘勿吝啬指出。 源代码下载、编译环境安装、源代码编译和运行模拟器的可能出现的一些错误在本文最后一章节,若出现类似错误,可以参考。 1、源码的下载 源代码的下载,首先需要安装以下软件:curl 和git-core 1.1安装curl: 在终端中执行:sudo apt-get install curl 1.2安装git-core 1.2.1在用户目录下新建bin文件 在终端中执行:mkdir ~/bin 将~/bin添加环境变量,作用是:要将git软件下载安装在此目录,在别的目录运行可能会找不到此软件,所以要添加到环境变量中 在终端中执行:PA TH=~/bin:$PATH 1.2.2安装git-core 在终端中执行:curl https://https://www.sodocs.net/doc/192777465.html,/dl/googlesource/git-repo/repo§> ~/bin/repo 给repo执行权限:chmod a+x ~/bin/repo 1.3 下载源代码 1.3.1进入要源代码将要保存的目录 如我的源代码保存在:、/opt/android/src 在终端中执行:cd /opt/android/src 进入到src目录中 1.3.2 获取repo最新的配置 repo init -u https://https://www.sodocs.net/doc/192777465.html,/platform/manifest§ 若是执行错误则用以下命令: ~/bin/repo init -u https://https://www.sodocs.net/doc/192777465.html,/platform/manifest§ 1.3.3 下载源代码 对于下载不同版本的android,指定一个manifest分支(即只指明android对应的版

    Ubuntu下编译Android源码全过程

    Ubuntu下编译Android源码全过程(转) 源码, 编译, Ubuntu, Android 一、获取Android源代码 Git是LinuxTorvalds(Linux之父)为了帮助管理Linux内核开发而开发的一个开放源码的分布式版本控制软件,它不同于Subversion、CVS这样的集中式版本控制系统。在集中式版本控制系统中只有一个仓库(Repository),许多个工作目录(WorkingCopy),而在Git这样的分布式版本控制系统中(其他主要的分布式版本控制系统还有BitKeeper、Mercurial、GNUArch、Bazaar、Darcs、SVK、Monotone等),每一个工作目录都包含一个完整仓库,它们支持离线工作,本地提交可以稍后提交到服务器上。 因为Android是由Kernel、Dalvik、Bionic、Prebuilt、build等多个项目组成,如果我们分别使用Git来逐个获取显得很麻烦,所以Android项目编写了一个名为Repo的Python 的脚本来统一管理这些项目的仓库,使得项目的获取更加简单。 在Ubuntu 8.04上安装Git只需要设定正确的更新源,然后使用apt-get就可以了,apt-get 是一条Linux命令,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或 操作系统。 apt-get命令一般需要root权限执行,所以一般跟着sudo命令。 sudo apt-get install git-core curl 这条命令会从互联网的软件仓库中安装git-core和curl。 其中curl是一个利用URL语法在命令行方式下工作的文件传输工具,它支持很多协议,包括FTP、FTPS、HTTP、HTTPS、TELENT等,我们需要安装它从网络上获取Repo脚本文件。 curl https://www.sodocs.net/doc/192777465.html,/repo >~/bin/repo 这句命令会下载repo脚本文件到当前主目录的/bin目录下,并保存在文件repo中。 最后我们需要给repo文件可执行权限

    最全的Android源码目录结构详解

    最全的Android源码目录结构详解 Android 2.1 |-- Makefile |-- bionic (bionic C库) |-- bootable (启动引导相关代码) |-- build (存放系统编译规则及generic等基础开发包配置) |-- cts (Android兼容性测试套件标准) |-- dalvik (dalvik JAVA虚拟机) |-- development (应用程序开发相关) |-- external (android使用的一些开源的模组) |-- frameworks (核心框架——java及C++语言) |-- hardware (部分厂家开源的硬解适配层HAL代码) |-- out (编译完成后的代码输出与此目录) |-- packages (应用程序包) |-- prebuilt (x86和arm架构下预编译的一些资源) |-- sdk (sdk及模拟器) |-- system (底层文件系统库、应用及组件——C语言) `-- vendor (厂商定制代码) bionic 目录 |-- libc (C库) | |-- arch-arm (ARM架构,包含系统调用汇编实现) | |-- arch-x86 (x86架构,包含系统调用汇编实现) | |-- bionic (由C实现的功能,架构无关) | |-- docs (文档) | |-- include (头文件) | |-- inet (?inet相关,具体作用不明) | |-- kernel (Linux内核中的一些头文件) | |-- netbsd (?nesbsd系统相关,具体作用不明) | |-- private (?一些私有的头文件) | |-- stdio (stdio实现) | |-- stdlib (stdlib实现) | |-- string (string函数实现) | |-- tools (几个工具) | |-- tzcode (时区相关代码) | |-- unistd (unistd实现) | `-- zoneinfo (时区信息) |-- libdl (libdl实现,dl是动态链接,提供访问动态链接库的功能)|-- libm (libm数学库的实现,) | |-- alpha (apaha架构) | |-- amd64 (amd64架构) | |-- arm (arm架构) | |-- bsdsrc (?bsd的源码)

    相关主题