Ubuntu下Android源码修改编译及运行launcher定制Word格式文档下载.docx
- 文档编号:20677219
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:19
- 大小:22.54KB
Ubuntu下Android源码修改编译及运行launcher定制Word格式文档下载.docx
《Ubuntu下Android源码修改编译及运行launcher定制Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Ubuntu下Android源码修改编译及运行launcher定制Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
09.$sudoapt-get-yinstalllibwxgtk
2.6-dev
10.$sudoapt-get-yinstallbuild-essential
11.$sudoapt-get-yinstallzip
12.$sudoapt-get-yinstallcurl
13.$sudoapt-get-yinstalllibncurses5-dev
14.$sudoapt-get-yinstallzlib1g-dev
15.$sudoapt-get-yinstallvalgrind
注意:
(如果是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,$(findstring64,$(build_arch)))修改为:
ifneq(i686,$(findstringi686,$(build_arch)))
对于32位系统所出现的问题,解决方法:
Error1:
make:
***
[out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o]error1在terminal中输入
$geditframeworks/base/libs/utils/Android.mk
将LOCAL_CFLAGS+=-DLIBUTILS_NATIVE=1$(TOOL_CFLAGS)修改为:
LOCAL_CFLAGS+=-DLIBUTILS_NATIVE=1$(TOOL_CFLAGS)–fpermissive
Error2:
***[out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]error1此处编译错误是由于ubuntu
11.10采用了G
CC4.6.1导致的
86.mk
并将以下语句:
HOST_GLOBAL_CFLAGS
+=-D_FORTIFY_SOURCE=0
修改为:
+=-U_FORTIFY_SOURCE-D_FORTIFY_SOURCE=0
Android源码下载
1、安装repo
安装过程步骤如下所示:
Repo下载安装
1、$mkdir~/bin//在home目录下创建bin文件夹
2、$PATH=~/bin:
$PATH//环境变量设置
3、$curlhttps:
4、$chmoda+x~/bin/repo//权限设置,保证repo可执行
Repoclient初始化
1、$mkdirAndroid//创建Android目录,用于存放下载的android源码
2、$cdAndroid//进入到Android目录
3、$repoinit-uhttps:
当然也可以指定android版本,使用如下命令:
$repoinit-uhttps:
4.0.1_r1Android源码文件获取
$reposync
Android源码编译
环境初始化
1、$sourcebuild/envsetup.sh
OR
$.build/envsetup.sh
2、$lunchfull-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、如果是编译过程中出现错误,一般导致的原因是因为缺少了相关编译环境,可以根据提示进行安装,安装后,重新进行编译。
WindowsXP下使用Android模拟器运行所编译好的文件。
原理:
将Android模拟器下所加载的system.img替换成编译后的system.img即可。
1、将编译好的system.img从Ubuntu中拷贝出来
方法:
1)先拷贝到U盘或者移动硬盘中,再从U盘或移动硬盘拷贝到WindowsXP硬盘下;
2)先进行WindowsXP跟Ubuntu文件夹共享,这样就可以将system.img拷贝到共享文件夹中;
3)传FTP,从FTPxx进行下载;
4)在Ubuntu中上网将system.img作为附件进行邮件发送,然后从WindowsXP下进行下载。
2、将拷贝出来的system.img文件放置到Android模拟器下的对于文件夹中,如果Android是
4.0以上的版本的话,一般是在system-imges文件夹中。
C:
\ProgramFiles\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、$cdframeworks/base/packages/SettingsProvider/res/values//在下载的Android源码目录下输入此命令,进入到values目录下
2、$geditdefaults.xml//使用文本编辑器打开defaults.xml文件
3、将<
integername="
def_screen_off_timeout"
>
600<
/integer>
改为<
-1<
保存后退出//其中600单位是ms,表示60s,就是说60s屏幕会进行休眠状态,改为-1后,不再进入休眠
4、$cd../../../../../..///返回到源码目录下
5、$source./build/envsetup.sh//环境初始化
6、$mmmframeworks/base/packages/SettingsProvider///对SettingsProvider模块进行编译
7、$makesnod//重新打包system.img
到这里,模拟编译就完成了,查看效果的话,直接将Android模拟器下的system.img替换掉启动运行即可。
mmm命令可以对模块进行编译,后面必须接上模块所在目录,查看某目录是否为一模块,就看当前目录下是否有Android.mk文件,如果有的话,就是模块。
除了可以使用mmm进行编译的话,还可以使用mm,但是mm是在当前目录下实行编译的,也就是模块目录下使用此命令。
实例2:
实现Android启动后不进入锁屏状态。
修改KeyguardViewMediator.java文件下的变量,将其赋值改为false即可。
2、$geditKeyguardViewMediator.java//是用文本编辑器打开java文件
3、将privatebooleanmExternallyEnabled=true;
代码中的true改为false,保存退出
4、$cd../../../../../../../../..///返回到源码目录下
6、$mmmframeworks/base/policy///对policy模块进行编译
如果在进行模块代码编译了,报出少了一个odex后缀名的文件的错误时,总结了下,导致报错的原因可能是Android版本的差异,不过没事,即使模块编译通不过,还是可以对整个源码进行编译的(直接在源码目录下执行make命令即可),只是时间会相对较长,同样会将修改的模块整合到system.img文件中。
Android
4.0下防止用户对安装程序进行卸载
1、UninstallAppProgress.Java//程序卸载过程
2、UninstallerActivity.java//程序卸载界面
方法是在UninstallerActivity.java对应位置加上一段代码即可:
@Override
publicvoidonCreate(Bundleicle){
super.onCreate(icle);
//Getintentinformation.
//WeexpectanintentwithURIoftheformpackage:
//<
packageName>
#<
className>
//classNameisoptional;
ifspecified,itistheactivitytheuserchosetouninstallfinalIntentintent=getIntent();
UripackageURI=intent.getData();
StringpackageName=packageURI.getEncodedSchemeSpecificPart();
if(packageName==null){
Log.e(TAG,"
Invalidpackagename:
"
+packageName);
showDialog(DLG_APP_NOT_FOUND);
/*AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
//builder.setIcon(android.R.drawable.ic_dialog_info);
builder.setTitle("
Message"
);
builder.setMessage("
Cannotbeuninstall!
builder.setPositiveButton("
确认"
null);
//builder.create().show();
builder.show();
//showDialog(DLG_APP_NOT_FOUND);
//return;
finish();
*/
newAlertDialog.Builder(this)
.setTitle("
游戏控制"
)
.setMessage("
对不起,此程序不允许卸载!
.setPositiveButton("
确定"
newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialoginterface,inti){
//这里设置点击后执行
}}).show();
}mPm=getPackageManager();
booleanerrFlag=false;
4.0下防止用户对安装程序进行强行停止
1、在forceStopPackage函数中,加上一段代码
2、publicvoidforceStopPackage(finalStringpackageName){
3、if
(checkCallingPermission(android.Manifest.permission.FORCE_STOP_PACKAGES)
4、!
=PackageManager.PERMISSION_GRANTED){
5、Stringmsg="
PermissionDenial:
forceStopPackage()frompid="
6、+Binder.getCallingPid()
7、+"
uid="
+Binder.getCallingUid()
8、+"
requires"
android.Manifest.permission.FORCE_STOP_PACKAGES;
9、Slog.w(TAG,msg);
10、thrownewSecurityException(msg);
11、}
12、finalintuserId=UserId.getCallingUserId();
13、longcallingId=Binder.clearCallingIdentity();
14、try{
15、IPackageManagerpm=AppGlobals.getPackageManager();
16、intpkgUid=-1;
17、synchronized(this){
18、try{
19、pkgUid=pm.getPackageUid(packageName,userId);
20、}catch(RemoteExceptione){
21、}
22、if(packageName==-1){
23、Slog.w(TAG,"
InvalidpackageName:
"
24、return;
25、}
26、//添加判断代码
28、return;
29、}
30、//
31、forceStopPackageLocked(packageName,pkgUid);
32、try{
33、pm.setPackageStoppedState(packageName,true,userId);
34、}catch(RemoteExceptione){
35、}catch(IllegalArgumentExceptione){
36、Slog.w(TAG,"
Failedtryingtounstoppackage"
37、+packageName+"
:
+e);
38、}
39、}
40、}finally{
41、Binder.restoreCallingIdentity(callingId);
+
42、}
43、}
方法二:
这是在网上看到的方法,尝试了下,编译通过了,但是在模拟器上面运行的时候出问题
2、修改clearApplicationUserData函数
44、publicbooleanclearApplicationUserData(finalStringpackageName,
45、finalIPackageDataObserverobserver,finalintuserId){
46、enforceNotIsolatedCaller("
clearApplicationUserData"
47、intuid=Binder.getCallingUid();
48、intpid=Binder.getCallingPid();
49、longcallingId=Binder.clearCallingIdentity();
50、try{
51、IPackageManagerpm=AppGlobals.getPackageManager();
52、intpkgUid=-1;
53、synchronized(this){
54、try{
55、pkgUid=pm.getPackageUid(packageName,userId);
56、}catch(RemoteExceptione){
57、}
58、if(pkgUid==-1){
59、Slog.w(TAG,"
60、returnfalse;
61、}
63、AlertDialog.Builderbuilder=newAlertDialog.Builder(mContent);
64、builder.setTitle();
65、builder.setMessage(msg);
66、builder.setPositiveButton("
OK"
new
DialogInterface.OnClickListener(){
67、publicvoidonClick(DialogInterfacedialoginterface,inti){
68、//Clickevent
69、}
70、}
71、);
72、builder.create().show();
73、returnfalse;
74、}
75、if(uid==pkgUid||checkComponentPermission(
76、
android.Manifest.permission.CLEAR_APP_USER_DATA,
77、
78、
79、pid,uid,-1,true)
==PackageManager.PERMISSION_GRANTED){forceStopPackageLocked(packageName,pkgUid);
80、}else{
81、throw
permission:
+newSecurityException(pid+"
doesnothave
82、
android.Manifest.permission.CLEAR_APP_USER_DATA+"
tocleardata"
+
83、"
forprocess:
+packageName);
84、}
85、}
86、
87、try{
88、//clearapplicationuserdata
89、pm.clearApplicationUserData(packageName,observer,userId);
90、Intentintent=newIntent(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(RemoteExceptione){
96、}
97、}finally{
98、Binder.restoreCallingIdentity(callingId);
99、}
100、returntrue;
101、}
Launcher桌面定制
方法一:
将系统的Launcher进行删除,使用自己编写的Launcher。
实现步骤:
1、编写自己的Launcher。
例如:
建立Jhome工程,修改工程下的AndroidManifest.xml文件,如下所示:
//主屏activity属性设置
//Androidactivity属性设置大全http:
<
activity
android:
android:
launchMode="
singleTask"
clearTaskOnLaunch="
true"
stateNotNeed="
windowSoftInputMode="
adjustPan"
screenOrientation="
nosensor"
label="
@string/title_activity_laucher"
>
<
intent-filter>
actionandroid:
name="
android.intent.action.MAIN"
/>
//以下两条代码一定要加上,表示HomeScreen
categoryandroid:
android.intent.category.LAUNCHER"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Ubuntu Android 源码 修改 编译 运行 launcher 定制