比如某个Phone.apk应用,会用到framewrok里面的东西,用import来指定,但是我在网上看import并不等于C语言中的include,所以framewrok里面的代码实际上并没有被编译进Phone.apk中,那是Phone.apk在运行的时候动态的去找framewrok里面的代码?在system/lib下会有framework编译出来的jar包,那么是所有应用共用一个jar包?还是每个应用有自己的jar包?
我们知道Linux下的动态链接库.so就是所有应用可以共用,不知道java是不是有类似的功能?忘高手给与解答
我们知道Linux下的动态链接库.so就是所有应用可以共用,不知道java是不是有类似的功能?忘高手给与解答
解决方案 »
- android项目开发,红色代码提示错误,如何修改,求大神帮忙!
- Android Failed to open libwvm.so问题
- android手机与pc之间的通信问题
- BufferedReader的readLine导致程序崩溃,画面黑屏
- Android 后台应用 无界面,怎么启动service
- android "已允许xx获取权限"能去掉吗
- 【100分!】2G网络下手机与电脑服务器socket通信的问题
- ubuntu下的android源码文件夹全变成可执行文件,怎么变回来?
- android动画animation的问题,求大神救命啊~~~
- Android 界面下方的功能条目怎么实现的
- Android模拟器账户与同步设置,同步功能已关闭,如何打开啊?
- 亲,怎么向服务器里面写文件?亲,100分哦!!!
在Framework下,编译时会有好几个jar包:framework.jar、services.jar、android-policy.jar、common.jar 以及系统资源res-common.apk和R.java文件这些架包都是供系统层调用的,各司其职,这些基本上能满足所有应用的调用
跟linux的make有神马关系呢?
对于动态库来说,只要编译的时候生成位置无关码,就没必要将库插进执行文件。静态库才需要。
java.io.InputStream is = java.lang.System.in;
可以省略为
import java.io.InputStream;
InputStream = System.in;应用程序加载的类库一定是用映射的手段,这样可以缩减系统消耗.这和.so的道理是一样的,这部分有Zygote进行管理.
我们知道动态库之所以能够多个进程共享一套代码并能够动态执行 ,那是因为有ld的支持,把这段代码映射到了某个共享的地址上,而且最重要的一点就是C语言里面符号导出,某个进程需要某个函数的话,会根据符号表去找
我在想在java里面是不是也有类似的一套机制,framework的代码被java的ld加载到系统共享的一段内存里,但是这部分代码包括不包括一份虚拟机的代码?不然别人调用他的时候,他怎么执行?
按我的理解 安装的时候 已经把APK的信息都记录到runtime的系统里面了
我在想在java里面是不是也有类似的一套机制,framework的代码被java的ld加载到系统共享的一段内存里,但是这部分代码包括不包括一份虚拟机的代码?不然别人调用他的时候,他怎么执行?
这里framework中的部分代码逻辑(比如很多后台的service)的确是在系统的内存里面 但是应该不是共享内存吧
第一路由应用请求启动application
apk -> AMS -> startProcess -> attachApplicationLocked -> Thread.attach
第二路 Dalvik 启动process
看来这部分代码并不包含虚拟机的代码了
你说的这个也不reasonable,这个跟APK载入和安装好像关系不大这里framework中的部分代码逻辑(比如很多后台的service)的确是在系统的内存里面 但是应该不是共享内存吧这句话倒是有点提醒我,framework里面的代码好像都是service,而这些service又是AIDL的,所以是不是说framework的代码只需有一份在运行时,就OK了,我怀疑有个runtime的进程里面跑得是不是就是这些东西?
你的APK安装之后解析为有效的应用APK才能被dalvik执行 这时候会把你的APK信息存到PM中
之后才可能有权限去调用framework层的代码
如果解析失败 连执行的权限都没有 比如framework-res.apk
是这样
zygote在init的时候会preload一下java的class,这就是framework里面的所有东西,注意,代码只load了一份,作为java虚拟机的runtime运行时库来处理,当zygote第一个进程的时候,这个进程就拥有了这写class,最牛X的地方就是他利用了linux的COW机制,把这个东西可以复制给他所有的子进程,不得不佩服android的设计者。