关键词不能为空

当前您在: 主页 > 英语 >

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

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-09 10:26
tags:

-

2021年2月9日发(作者:trainees)


环境




Linux


版本:


Ubuntu 11.04


( 可由


10.10


的版本进行升级)


64


位系统



GCC


版本:


gcc version 4.5.2


Java


版本:


java version



下载


androi d


源码前注意:



< br>1


、保证


Ubuntu


系统中的 容量在


80G


左右,


以保证足够的空间 来存放


android


源码以及


编译后 的相关文件。




2

< br>、保证


Ubuntu


系统进行


I nternet


访问。



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



1


、虚拟机


?


设置


?


硬件


?


网络 适配器


?


网络连接


?

< br>桥接



2


、启动


Ubuntu


系统,打开终端(在普通用户下)


,输入 相关命令如下:



$$ pppoeconf




//


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



$$ sudo pon dsl-provider




//


上网连接命令



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




Android


源码编译所依赖的< /p>


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


的系统的话,则要更改几个


文件)



01./external/clearsilver/cgi/



02./external/clearsilver/java-jni/



03./external/clearsilver/util/



04./external/clearsilver/cs/



gedit


打开,修改


m64



m32


即可




另外



将< /p>


build/core/


中的


ifneq (64,$$(findstring 64,$$(build_arch)))


修改为:



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



对于


32


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



Error1




make: ***


[out/host/linux-x8 6/obj/STATIC_LIBRARIES/libutils_intermediates/RefB ase.o] error



1



terminal


中输入



$$ gedit frameworks/base/libs/utils/



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


修改为:



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



fpermissive



Error2




make: *** [out/host/linux-x86/obj/EXECU TABLES/obbtool_intermediates/Main.o]




error 1


此处编译错误是由于


ubuntu 11.10


采用了


GCC4.6.1


导致的



修改源码目录下


/build/core/combo/H OST_


并将以下语句:



HOST_GLOBAL_CFLAGS


+= -D_FORTIFY_SOURCE=0


修改为:



HOST_GLOBAL_CFLAGS


+= -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0



Android


源码下载



1


、安装


repo


安装过程步骤如下所示:




Repo


下载安装




1



$$ mkdir ~/bin



//


在< /p>


home


目录下创建


bin


文件夹




2



$$ PATH=~/bin:$$PA


TH




//


环境变量设置




3



$$ curl /dl/googlesource/git-repo/repo > ~/bin/repo




//repo


下载




4



$$ chmod a+x ~/bin/repo



//


权限设置,保证


repo


可执行




Repo client


初始化




1



$$ mkdir Android



//


创建


A ndroid


目录,用于存放下载的


android

< p>
源码



2



$$ cd Android






//


进入到


Android


目录



3



$$ repo init -u /platform/manifest



//


指定


URL


清单


,



定包含在


Android

源代码的各种存储库将被安置在工作目录中



当然也可以指 定


android


版本,使用如下命令:



$$ repo init -u


/platform/manifest -b android-4.0.1_r1



Android


源码文件获取



$$ repo sync



注意:< /p>



Android


源码下载过程中凡出现 问题,可以进入


Android


源码下载的相关官方网站


/source/


进行查看。




Android


源码编译




环境初始化



1



$$ source build/



OR



$$ . build/



2



$$ lunch full- eng




//


选择编译目标




Code


编译




$$ make -j4



//


其中


j4


表示同时 启动


4


个线程任务进行编译,可以直接使用

make


,这样


就是最大程度使用线程数来进行编译





< p>








android





< p>
















下< /p>



/out/target/product/generic/


有三个镜像文件生成,分别是





以及






注意:


1



如果编译过程没有出问题,


但是在


/out/target/product/generic/



3


个镜像文件不全,


可以再次进行一次命令


make


,就可以解决问题了。






2


、如果是编译过程中出现错误,一般导致的原因是因为缺少了相关 编译环境,可以


根据提示进行安装,安装后,重新进行编译。




Windows XP


下使用


Android


模拟器运行所编译好的文件。




原理:将


Android

< p>
模拟器下所加载的



替换成编译后的



即可。



1




将编译 好的




Ubuntu

< br>中拷贝出来



方法:


1



先拷贝到


U


盘或者移 动硬盘中,


再从


U


盘或移动硬盘拷贝到


Windows XP


硬盘下;





2


)先进行


Windows


XP



Ubuntu


文 件夹共享,这样就可以将




贝到共享文 件夹中;




3


)传


FTP


,从


FTP


上进行下载;





4


)在


Ub untu


中上网将



作为附件进行邮件发 送,然后从


Windows


XP


下进行下载。



2




将拷贝 出来的



文件放置到


Android


模拟器下的对于文件夹中,如果


Android


4.0


以上的版本的话,一般是在


system-imges


文件夹中。


C:Program


FilesAndroidandroid-sdksystem- imagesandroid-15armeabi-v7a


3




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



注意:< /p>


创建


Android


虚拟机的时候,


Android


版本应该跟


Ubuntu< /p>


下编译好的


Android


版本要


保持一致,


否则有可能替换


< br>后,


Android


系统无法正常启动,


或者无法进入


Android


启动界面。





Android


源码修改并进行编译




下面以


2


个 实例来进行说明,


实例


1


目的是实现< /p>


Android


系统永不休眠,


实例


2


是实现


Android

< br>系统启动后,不自动进入锁屏界面。




实例


1





实现


Android


系统永不休眠其实很简单,只需要对源码下的配置文件


XML

< br>下的参数进


行修改即可。步骤如下:




1



$$ cd frameworks/base/packages/SettingsProvider/res/v alues



//


在下载的


Android


源码目


录下输入此命令,进入到


values


目录下




2



$$ gedit



//


使用文本编辑器 打开



文件




3





name=





name=


保存后退出



//


其中


60000


单位是


ms


,表示


60s,

< br>就是说


60s


屏幕会进行休眠状态,改为


-1


后,不再进入休眠




4



$$ cd ../../../../../../





//


返回到源码目录下




5



$$ source ./build/




//


环境初始化




6



$$ mmm frameworks/base/packages/SettingsProvider/



//



Se ttingsProvider


模块进行编


< br>



7



$$ make snod //


重新打包



到这里,


模拟编译就完成了,


查看效果的话,


直接将


Android


模拟器下的


替换掉


启动运行即可。




注意:


mmm


命令可以对模块进行编译,后面 必须接上模块所在目录,查看某目录是否为一


模块,


就看当前目 录下是否有



文件,


如果有的话,


就是模块。


除了可以使用


mmm


进行编译的话,还可以使用


mm


,但是


mm


是在当前目录下实行编译的,也就是模块目录下


使用此命令。





实例


2





实现


Android


启动后不进入锁屏状态。修改



文件下的变量,


将其赋值改为


false


即可。步骤如下:




1



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



//


在下载的


Android


源码目录下输入此命令,进入到


impl


目录下




2



$$ gedit



//


是用文本编辑器打开

< p>
java


文件




3


、将


private boolean mExternallyEnabled = true;


代码中的< /p>


true


改为


false


,保存退出




4



$$ cd ../../../../../../ ../../../













//


返回到源码目录下



5



$$ source ./build/









//


环境初始化




6



$$ mmm frameworks/base/policy/





//


对< /p>


policy


模块进行编译



7



$$ make snod //


重新打包



注意:


如果在进行模块代码编译了,


报出少了一个


odex


后缀名的文件的错误时,


总结了下,< /p>


导致报错的原因可能是


Android


版 本的差异,不过没事,即使模块编译通不过,还是可以对


整个源码进行编译的(直接在源 码目录下执行


make


命令即可)


,只 是时间会相对较长,同


样会将修改的模块整合到



文件中。





Android 4.0


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



打开源码目录找到


packages/apps/PackageInstaller /src/com/android/packageinstaller/


下的两个< /p>


文件:



1





//


程序卸载过程



2





//


程序卸载界面


< br>方法是在



对应位置加上一段代码即可:

< br>


@Override






public void onCreate(Bundle icicle) {










te(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 = a();










String packageName = odedSchemeSpecificPart();










if(packageName == null) {














Log.e(TAG


,














showDialog(DLG_APP_NOT_FOUND);














return;










}


if((







/*r builder= new r(this);







//n(_dialog_info);







le(







sage(







iti veButton(


确认








//().show();







();














//showDialog(DLG_APP_NOT_FOUND);







//return;







finish();*/







new r(this)







.setTitle(

< p>
游戏控制








.se tMessage(


对不起,此程序不允许卸载!








.setPositiveButton(

< br>确定








new kListener(){







public void onClick(DialogInterface dialoginterface, int i){




//


这里设置点击后执行





finish();







}







}







)







.show();






}










mPm = getPackageManager();










boolean errFlag = false;


加上红色部分的代码,


就可以对特定的安装 程序进行控制了。


其中


rapp



指安装程序的进程名,效果就是弹出提示框,提醒用户程序不允许卸载。




Android 4.0


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


< br>打









f rameworks/base/services/java/com/android/server/am /





找< /p>




文件,并打开它。


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



1





forceStopPackage


函数中,加上一段代码



2




public void forceStopPackage(final String packageName) {


3












if


(checkCallingPermission(_STOP_PACKAGES)


4




















!= SION_GRANTED) {


5
















String msg =


6
























+ lingPid()


7
























+


8
























+



requires



_STOP_PACKAGES;


9
















Slog.w(TAG


, msg);


10
















throw new SecurityException(msg);


11












}


12












final int userId = lingUserId();


13












long callingId = allingIdentity();


14












try {


15
















IPackageManager pm = kageManager();


16
















int pkgUid = -1;


17
















synchronized(this) {


18




















try {


19
























pkgUid = kageUid(packageName, userId);


20




















} catch (RemoteException e) {


21




















}


22




















if (packageName == -1) {


23
























Slog.w(TAG,


24
























return;


25




















}


26




















//


添加判断代码



27




















if( (


28
























return;


29




















}


30




















//


31




















forceStopPackageLocked(packageName, pkgUid);


32




















try {


33
























kageStoppedState(packageName, true, userId);


34




















} catch (RemoteException e) {


35




















} catch (IllegalArgumentException e) {


36
























Slog.w(TAG,


37
































+ packageName +


38




















}


39
















}


40












} finally {


41
















eCallingIdentity(callingId);


+

-


-


-


-


-


-


-


-



本文更新与2021-02-09 10:26,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/620604.html

Ubuntu下Android源码修改、编译及运行、launcher定制的相关文章

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