A. 关于学习安卓底层,懂得进
我干了3年android sdk开发,觉得到了瓶劲没法更进一步,于是花了一年多点时间,大概摸到点门径。根据前辈的经验,Android底层完全入门需要两年。
先说下我的入门过程:
第零步,下载源码,我下的4.2的,框架层源码10G,内核2G多,ctags给框架层建的标签文件都有600M,当时让我有点震撼,用的vim+ctags+cscope来阅读,还算不错,架构挺清晰的。
第一步,我找到了一本好书《Android的设计与实现 第一卷》它讲了Android框架层的启动,初始化,服务框架初始化,Binder,消息循环,PackageManagerService,ActivityManagerService。据作者说后面会出讲UI子系统的第二卷,拭目以待。其实这本书看了几十页我就发现需要第二步的知识,否则看不下去,于是跳去第二步。
第二步,学习linux系统编程,在看《Android的设计与实现》的时候我发现,框架层的Native部分,全是Linux编程。为了掌握这部分知识,我花了4个月学习了《Linux系统编程手册》(TLPI)这本1000多页的书,我以前是搞WIndows文件系统这块的,所以C语言还比较熟,TLPI的习题很有意思,量也比较大,坚持下来还是收获很多。
第三步,花了4个月学习了一些Linux内核的知识,看了LKD,PLKA看了一半多。越学越没底,觉得不懂得越来越多,不过这个也正常,只有靠慢慢磨,估计以后要不断的磨这块。
第四步,回头看Android源码,这次一口气看完了《Android的设计与实现 第一卷》,终于对框架层有了谱。同时真的数次把我看晕,前面看Linux内核源码都没这么晕,不断在java层和Native层之间跳有点磨脑浆。其中我又觉得Java的基础没有打太牢,回去补了一个月的《Core Java》第八版。但是这书没有涉及UI子系统,于是又看了《Android内核剖析》
第五步,《Android内核剖析》(这本书实际上是讲框架层的,作者也是个搞嵌入式的,所以他在写框架层的时候文笔不太好,很罗嗦,不过还是有很多看点,到他后来写做ROM,玩开发板时估计是说到了他的本行,一下子遛起来了看得出还是挺有水平的,这本书知识有点旧毕竟讲的是2.3很多代码已经过时,但是作者很多点子很有参考价值)这本书讲UI子系统和按键/触摸消息处理系统还是很有分量的,尤其13章View绘制那里,结合源码研究很有收获。而后面他讲编译框架和ROM相关的东西都是挺宝贵的资料。
第六步,为了再补一下其他诸如电源管理模块等子系统的知识看了,《深入理解android》系列,个人认为这个系列看起来有点不太舒服,不过作为补充印证还是比较有价值。
第七步,《Android系统源代码情景分析》,罗升阳的源码分析大作,比《Android的设计与实现》分析得更细致,但缺点是涉及到模块比较少,选用的源码也比《Android的设计与实现》更旧一点。看完书后需要去研究作者的博客,东西挺多的,一定让你满意。
第八步,买块开发板自己玩。这步我还没走到,原因是我觉得我还差点准备知识。可能要再几个月,到时准备入块6410或者树莓派。
最后,由于我11年以前都是搞Windows这块的,所以对Linux知识不是很了解,不得已看了这么些书,如果是一直做Linux的人,很多步骤估计可以省掉了。直接上源码才是正道。
我本身做着移动GIS开发的工作,学框架层全是因为兴趣,但招聘平台Android框架层开发人员还是蛮有竞争力的有不少定制ROM,智能电视的工作都处于人才难求状态,毕竟有一定的门槛,现在各种ios培训,让奔着钱干开发的人纷纷涌入,而ios只能干sdk开发的缺点就暴露出来了,一堆新手老手,菜鸟大牛全挤在SDK开发这块,我觉得不太妙。 反观Android这边,虽然入门菜鸟没有搞ios来钱,但是可持续性很好,从sdk-》框架》驱动》内核这样干下去。干着干着发现自己渐渐变成了Linux开发者/嵌入式开发者的人也不少,新人,老手,菜鸟大牛各居其位,层次性很好。
B. android 怎么获取应用安装包的大小
网上找了一下有两种方法:
1、直接拿到data目录下对应的包,然后用File.length()方法获得。然后会发现和设置里显示的大小不同。
2、通过反射调用设置里源码的方法获得PackageStats类的实例。
两种方法都不想用...
后来自己找到解决办法:
PackageManager类有个getPackageSizeInfo方法如下:
复制代码 代码如下:
public abstract void getPackageSizeInfo(String packageName,
IPackageStatsObserver observer);
只是这个方法是hide的。
自己编译一下的android2.3的Framework框架,把jar包拷出来,只需要把框架导入到library,设置在默认的android的lib之上遍可以优先使用自己编译的框架了,其实也就是让自己应用层能调用框架中的接口。
framework下载:点击此处
下载好后,通过添加lib后把classes.jar添加到此lib中,如图:
下面就是直接使用方法了。
代码如下:
pm.getPackageSizeInfo(packageInfo.packageName,
new IPackageStatsObserver.Stub() {
public void onGetStatsCompleted(PackageStats stats,
boolean succeeded) {
Log.v("King", stats.codeSize);
Log.v("King", stats.dataSize);
Log.v("King", stats.cacheSize);
}
});
第一个参数是包名,想必大家都能拿到。
第二个参数是实现AIDL生成的JAVA接口的匿名内部类。在回调方法里即可处理程序大小数据。
stats.codeSize:应用程序大小
stats.dataSize:数据大小
stats.cacheSize:缓存大小
一般大家可能都是用listView去显示每个应用的大小,而调用getPackageSizeInfo方法是不能立刻拿到值的,所以要和其他数据异步显示。
可以通过handler讲数据发送出去后,然后调用Adapter的notifyDataSetChanged()方法更新显示应用大小。
也许你还想点击每一项可以可以直接跳转到设置里的应用管理界面,而不自己去写卸载、清除缓存等方法。设置源码的方法如下,可以搬过来照样用:
代码如下:
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,Uri.fromParts("package",包名 ,null));
// start new activity to display extended information
startActivityForResult(intent, 1);
C. Ubuntu14.04编译Android源码,需要有多大的磁盘空间。给Ubuntu虚拟机分配20G
不够,系统开销加上开发环境和编译环境就差不多20G了,如果你再装一些IDE工具,20G空间很紧张的。空间充足的话,建议分配80G以上。
D. Android Adb 源码分析(一)
Android ADB源码分析的要点如下:
ADB工具概述:
ADB源码位置:
ADB在解决特定问题中的应用:
ADB代码修改与编译:
后续研究方向:
重点内容:ADB源码位于system/core/adb目录,ADB工具由adb client、adb service和adb daemon三部分构成,在解决特定问题时,可以通过修改adb代码和利用后门机制来实现特定功能,同时需要建立Android编译环境进行编译。
E. 安卓app开源代码在哪下 android开发源码
Android开发源码的获取与使用
一、获取Android开发源码
官方渠道:
GitHub等代码托管平台:
第三方镜像站点:
二、在Eclipse中使用Android开发源码
安装Eclipse和ADT插件:
导入Android源码项目:
配置构建环境:
浏览和修改源码:
编译和运行项目:
三、注意事项
通过以上步骤,你可以在Eclipse中成功获取并使用Android开发源码进行开发工作。
F. 安卓修改系统代码实现多开
安卓修改系统代码实现多开是一个复杂且需要深入理解Android系统架构和源码的过程。
关键步骤包括:
准备开发环境和目标设备:
配置Ubuntu虚拟机或相应的开发环境。
安装JDK(Java Development Kit)以支持Java代码的编译和运行。
准备Android源码,这通常需要从Android开源项目(AOSP)中获取。
修改用户限制:
在Android源码中,找到UserManagerService.java文件。
修改MAX_MANAGED_PROFILES字段的值,以允许创建更多的多开用户。例如,将其改为一个更高的数字,以支持所需数量的多开用户。
创建及管理多用户:
通过调用createProfile方法创建多开用户(即多开容器)。
每个多开应用将运行在不同的用户中,拥有独立的数据目录,但可能共用同一个APK文件。
需要实现用户的管理功能,如切换用户、删除用户等。
定制化安装与卸载流程:
为多开应用定制安装和卸载流程,以确保它们能够正确地安装到不同的用户中。
这可能涉及修改Android的包管理器(Package Manager)或服务。
调整UI显示:
修改系统UI以支持多开用户的显示和管理。
这可能包括添加新的用户界面元素或修改现有的界面布局。
考虑进程间通信(IPC)机制:
Binder是Android中常用的进程间通信机制。
在多开应用中,Binder用于保持不同进程中的应用之间的通信和数据同步。
总结:安卓修改系统代码实现多开是一个技术挑战,需要深入理解Android系统的内部机制。由于修改系统代码可能带来的风险和不稳定性,建议在进行此类操作前充分备份数据,并在非生产环境中进行测试。