最后
在这里小编整理了一份Android大厂常见面试题,和一些Android架构视频解析,都已整理成文档,全部都已打包好了,希望能够对大家有所帮助,在面试中能顺利通过。
喜欢本文的话,不妨顺手给我点个小赞、评论区留言或者转发支持一下呗
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
$ mkdir ANDROID_SOURCE
$ cd ANDROID_SOURCE
5: 获取git上的android源码版本
$ repo init -u https://android.googlesource.com/platform/manifest
我们下载最新版
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.3\_r1
此时需要你填写用户名和email
[![image](http://images.cnblogs.com/cnblogs_com/jqyp/201202/201202270143121083.png "image")](http://images.cnblogs.com/cnblogs_com/jqyp/201202/201202270143093954.png)
填写后即可执行同步命令
6:下载源码
$ repo sync
可加参数: -jx x代表开启多少个线程来下载源码
源码+repo 一共13G左右(因为repo会自动执行check out 命令)
如果中间出错或者网络不稳定,可以重新初始化repo,用同一个email即可实现本地git库和服务器git库的同步
**编译源码**
下载完源码后进入源码主目录
1 :执行:
$ source build/envsetup.sh
souce命令执行的是源码包build目录下的envsetup文件
[![image](http://images.cnblogs.com/cnblogs_com/jqyp/201202/201202270143191469.png "image")](http://images.cnblogs.com/cnblogs_com/jqyp/201202/201202270143155769.png)
可以看出这个文件里定义了很多函数供编译使用
function help()
function get\_abs\_build\_var()
function get\_build\_var()
function check\_product()
function check\_variant()
function setpaths()
function printconfig()
function set\_stuff\_for\_environment()
function set\_sequence\_number()
function settitle()
function choosetype()
function chooseproduct()
function choosevariant()
function tapas()
function choosecombo()
function print\_lunch\_menu()
function lunch()
function gettop
function m()
function findmakefile()
function mm()
function mmm()
function croot()
function pid()
function gdbclient()
function jgrep()
function cgrep()
function resgrep()
function getprebuilt
function tracedmdump()
function runhat()
function getbugreports()
function startviewserver()
function stopviewserver()
function isviewserverstarted()
function smoketest()
function runtest()
function runtest\_py()
function godir ()
2:选择一个target
$ lunch full-eng
[![image](http://images.cnblogs.com/cnblogs_com/jqyp/201202/201202270143201370.png "image")](http://images.cnblogs.com/cnblogs_com/jqyp/201202/2012022701431941.png)
我们编译后在模拟器中运行,所以选择full
[![image](http://images.cnblogs.com/cnblogs_com/jqyp/201202/201202270143217683.png "image")](http://images.cnblogs.com/cnblogs_com/jqyp/201202/201202270143209942.png)
我们选择最大的权限,也就是root后的版本,所以选择eng
3:编译源码
$ make -j4
过程大概3小时
编译完后在源码目录下会生成out文件夹如图
[![image](http://images.cnblogs.com/cnblogs_com/jqyp/201202/201202270143298951.png "image")](http://images.cnblogs.com/cnblogs_com/jqyp/201202/201202270143245891.png)
好了,可以检验以下我们编译的源码是否正常运行了
$ emulator
如果提示找不到命令,请初始化环境
$ source build/envsetup.sh
$ lunch full-eng
[![image](http://images.cnblogs.com/cnblogs_com/jqyp/201202/201202270143353864.png "image")](http://images.cnblogs.com/cnblogs_com/jqyp/201202/201202270143321195.png)
下载的过程中可能遇到的问题:
报错:
[]( )
1. Exception in thread Thread-3:
2. Traceback (most recent call last):
3. File "/usr/lib/python2.6/threading.py", line 532, in \_\_bootstrap\_inner
4. self.run()
5. File "/usr/lib/python2.6/threading.py", line 484, in run
6. self.\_\_target(\*self.\_\_args, \*\*self.\_\_kwargs)
7. File "/home/haili/android-4.0.4\_r1.2/.repo/repo/subcmds/sync.py", line 200, in \_FetchHelper
8. clone\_bundle=not opt.no\_clone\_bundle)
9. File "/home/haili/android-4.0.4\_r1.2/.repo/repo/project.py", line 978, in Sync\_NetworkHalf
10. and self.\_ApplyCloneBundle(initial=is\_new, quiet=quiet):
11. File "/home/haili/android-4.0.4\_r1.2/.repo/repo/project.py", line 1519, in \_ApplyCloneBundle
12. exist\_dst = self.\_FetchBundle(bundle\_url, bundle\_tmp, bundle\_dst, quiet)
13. File "/home/haili/android-4.0.4\_r1.2/.repo/repo/project.py", line 1583, in \_FetchBundle
14. raise DownloadError('%s: %s ' % (req.get\_host(), str(e)))
15. DownloadError: android.googlesource.com: <urlopen error \[Errno 110\] Connection timed out>
16. ...
Exception in thread
Thread-3:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 532, in \_\_bootstrap\_inner
self.run()
File "/usr/lib/python2.6/threading.py", line 484, in run
self.\_\_target(\*self.\_\_args, \*\*self.\_\_kwargs)
File "/home/haili/android-4.0.4\_r1.2/.repo/repo/subcmds/sync.py", line
200, in \_FetchHelper
clone\_bundle=not opt.no\_clone\_bundle)
File "/home/haili/android-4.0.4\_r1.2/.repo/repo/project.py", line 978,
in Sync\_NetworkHalf
and self.\_ApplyCloneBundle(initial=is\_new, quiet=quiet):
File "/home/haili/android-4.0.4\_r1.2/.repo/repo/project.py", line
1519, in \_ApplyCloneBundle
exist\_dst = self.\_FetchBundle(bundle\_url, bundle\_tmp, bundle\_dst,
quiet)
File "/home/haili/android-4.0.4\_r1.2/.repo/repo/project.py", line
1583, in \_FetchBundle
raise DownloadError('%s: %s ' % (req.get\_host(), str(e)))
DownloadError: android.googlesource.com: <urlopen error \[Errno 110\]
Connection timed out>
...
看这出错很莫名,Python是正确安装了的,版本也是要求的。其实官网([http://source.android.com/source/downloading.html]( ))有段说明,如果认真执行就可解决。
1\. 浏览器登录https://android.googlesource.com/new-password,并用gmail帐号登录;
2\. 点击网页上的“允许访问”,得到类似:
[]( )
1. machine android.googlesource.com login git-<userName>.gmail.com password <password>
2. machine android-review.googlesource.com login git-<userName>.gmail.com password <password>
machine
android.googlesource.com login git-<userName>.gmail.com password
<password>
machine android-review.googlesource.com login
git-<userName>.gmail.com password <password>
的信息。
3\. 把上面那段信息(<userName>和<password>用自己得到的真实信息)追加到~/.netrc文件结尾;
4\. 下载地址的URI更改为https://android.googlesource.com**/a**/platform/manifest(中间加上了“/a”)。
然后按照官网描述的正常步骤操作,即可拉下Android源码。官方的说法是:因为访问基本是匿名的,为了防止连接过多,对同一IP地址的连接数做了一定的限制。看来是用gmail帐号进行认证。
这样的话,在公司网络内或者用虚拟机下载的话,会经常遇到这问题。
编译遇到的问题:
问题如下:
Install: out/host/linux-x86/framework/droiddoc.jar
target Generated: libclearsilver-jni <= out/host/common/obj/JAVA_LIBRARIES/clearsilver_intermediates/javalib.jar
host C: libclearsilver-jni <= external/clearsilver/java-jni/j_neo_util.c
In file included from /usr/include/features.h:378,
from /usr/include/string.h:26,
from external/clearsilver/java-jni/j_neo_util.c:1:
/usr/include/gnu/stubs.h:9:27: error: gnu/stubs-64.h: 没有那个文件或目录
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libclearsilver-jni_intermediates/j_neo_util.o] 错误 1
解决办法:
sudo apt-get install lib64z1-dev libc6-dev-amd64 g++-multilib lib64stdc++6
下载android kernel及编译:
第一步:下载goldfish源码
在Android源码根目录下新建kernel文件夹
-
$mkdir kernel
-
$cd kernel
$mkdir kernel $cd kernel下载源码:
- $git clone http://android.googlesource.com/kernel/goldfish.git
$git clone http://android.googlesource.com/kernel/goldfish.git
下载完毕如下图:
此时在kernel目录下会生成一个goldfish文件夹。进入此目录:
- $cd goldfish
$cd goldfish
此目录下有一个隐藏的目录.git,通过
- $ls -al
$ls -al
可看到此目录:
最后
希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
可看到此目录:
最后
希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
[外链图片转存中…(img-l4qENvQk-1715671751209)]
好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
[外链图片转存中…(img-2OXSMYsi-1715671751209)]
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!