xiaoguozi's Blog
Pay it forword - 我并不觉的自豪,我所尝试的事情都失败了······习惯原本生活的人不容易改变,就算现状很糟,他们也很难改变,在过程中,他们还是放弃了······他们一放弃,大家就都是输家······让爱传出去,很困难,也无法预料,人们需要更细心的观察别人,要随时注意才能保护别人,因为他们未必知道自己要什么·····

iOS通过让本地代码拦截JavaScript中调用的 window.location=”gap://Class.method/args”命令,来实现从JavaScript到本地代码之间的通信。在本地 代码拦截该命令后,解析获取的参数,然后调用对应的类、方法并传递参数。对应的,使用 UIWebView.stringByEvaluatingJavaScriptFromString来实现本地代码调用JavaScript。

Android通 过拦截JavaScript的prompt命令实现从JavaScript到本地代码的通信。JavaScript prompt命令默认会弹出对话框,而PhoneGap的Android本地代码会拦截该对话框,并进一步取得JavaScript数据。相应 的,Android上的PhoneGap内部,使用Java实现了一个HTTP服务器,通过持久性的XHR连接,JavaScript可以不断轮询内部 XHR服务器存储的信息,从而实现了从Java到JavaScript方向的通信。

BlackBerry 4.xJavaScript 与本地代码之间的唯一通信方式是通过document.cookie实现的。JavaScript设定Cookie,本地代码从Cookie中获取信息。 对应的,本地代码也可以设定Cookie,允许JavaScript从Cookie中获取本地代码信息。

BlackBerry WebWorks新 的BlackBerry WebWorks SDK更好地支持了Java与JavaScript之间的交互通信。通过ScriptEngine.addExtension,Java对象可以被暴露给 JavaScript,而对应的Java可以使用ScriptEngine.executeScript来调用JavaScript。

Windows Phone 7在Windows Phone 7中,JavaScript通过window.external.Notify可以将信息发送给本地代码。而相应的,WebBrowser.InvokeScript允许本地代码调用JavaScript。

posted @ 2013-02-22 15:16 小果子 阅读(1601) | 评论 (0)编辑 收藏

浏览器探究——执行网页跳转

Main线程中执行。

UrlInputView

控件UrlInputView执行OnEditorAction->finishInput

/**

 *url/search input view

 *handling suggestions

 */

public class UrlInputView extendsAutoCompleteTextView

       implements OnEditorActionListener,

       CompletionListener, OnItemClickListener, TextWatcher

由此可见,UrlInputView即输入网址的那个控件,该控件包括输入URL和执行搜索输入。

Controller

在经过UrlInputView的处理后,会调用Controller.handleNewIntent。

Controller是浏览器中最重要的类,作为整个浏览器的主控类。Controller中有IntentHandler,这里会调用IntentHandler.onNewIntent

IntentHandler

//Handle all browser related intents

这里对一些特殊的URL做处理这里还包含了一些debug信息,比如”about:debug.dom.file"这种形式的网址。如果是普通的 url,不需要做特殊处理,则执行到最后执行Controller.loadUrlDataIn,即经过了IntentHandler后又回到了 Controller。

Controller

/**

    * Load UrlData into a Tab and update the title bar to reflect the new

    * load.  Call this instead ofUrlData.loadIn directly.

    * @param t The Tab used to load.

    * @param data The UrlData being loaded.

    */

经过简单的处理,会把要加载的url作为参数调用被显示的tab,即执行Tab.loadUrl。这样看来Controller还只是个桥梁的作 用,把从UrlInputView得到的url,交给IntentHandler做处理,然后再把url交给Tab做实际的加载。

Tab

//Class for maintaining Tabs with a mainWebView and a subwindow.

Tab作为一个窗口的抽象概念而存在,对一个窗口的操作都需要通过Tab来进入。另外有个TabControl用来管理所有的Tab.

执行语句mMainView.loadUrl。这个mMainView是个WebView。从这终于进入了framework的webkit层了。

WebView

WebView作为Tab的核心控件,负责网页的真正的加载,显示等操作,是framework/webkit中最主要的类。通过Tab来找到WebView.

在WebView.loadUrl->WebView.loadUrlImpl中会向WebViewCore发消息,

WebViewCore

该类在一个独立的线程中运行,该类主要通过Message,Handler的机制在WebView与WebViewCore之间通讯的,这里 WebView是在Main线程中,而WebViewCore是在单独的 WebViewCoreThread线程中。WebViewCore是 framework/webkit核心类,它在单独的线程中来接收消息,每个消息相当于一个请求的任务,而这个WebViewCore相当于一个服务,它 在消息循环中不停的接收任务(消息),然后处理任务,然后再接收下一个任务(消息)。任务的执行很多是通过jni调用c层webkit来操作的。在c层 webkit有webkit/Source/WebKit/android/jni/WebViewCore.cpp与该java层的 WebViewCore对应。即这个WebViewCore是java层与c层的一个主要桥梁。

在WebView.loadUrlImpl在执行了mWebViewCore.sendMessage(EventHub.LOAD_URL, arg);则WebViewCore接收到LOAD_URL任务,执行对它的处理。

WebViewCore中有BrowserFrame成员

BrowserFrame

BrowserFrame extends Handler它也有很多JNI与C层的webkit的Webkit/Source/WebKit/android/jni /WebCoreFrameBridge.cpp对应。它用来处理页面的具体情况,即Frame,这个Frame是一个具体的页面的概念。

WebViewCore.loadUrl会调用BrowserFrame.loadUrl。BrowserFrame会调用到WebCoreFrameBridge.cpp的LoadUrl。

这里略去c层的处理部分。

WebCoreFrameBridge.cpp的LoadUrl执行后会执行到WebCoreFrameBridge.cpp的loadStarted,这里又会回调BrowserFrame.loadStarted函数。

/**

    * native callback

    * Indicates the beginning of a new load.

    * This method will be called once for the main frame.

    */

即通过BrowserFrame的loadUrl在c层做处理后,又回调到BrowserFrame的loadStarted。

这里在理一下,主线程中有Tab,Tab里有WebView。即WebView也是运行在主线程的。而WebView里有WebViewCore,WebViewCore又是运行在一个单独的线程里的。

那么多个WebView是否就对应多个WebViewCore和多个WebViewCore线程呢?

看下WebView,WebView的构造函数中会mWebViewCore= new WebViewCore(context, this, mCallbackProxy, javaScriptInterfaces);创建了WebViewCore对象,即每个WebView都有个WebViewCore对象。但是 WebViewCore中的WebCoreThread是一个静态的,即一个单例的。而这个WebCoreThread中运行的 privatestatic Handler sWebCoreHandler;也是个静态的。

由此可见WebViewCore类本身就是个外壳,真正处理任务的是WebCoreThread及其里面的sWebCoreHandler,这个真 正处理任务的是静态的,只有一份,WebViewCore这个外壳只是沟通webView与WebCoreThread的桥梁,相当于一个代理类。是 WebCoreThread提供给外面的处理接口。

那么BrowserFrame呢?在WebViewCore的构造最后会发送一个INITIALIZE的消息给 WebCoreThread,WebCoreThread接收到后会执行WebViewCore.initialize,这个函数会构造 mrowserFrame。即每次构造WebViewCore时同样会构造一个BrowserFrame。但是为什么不在主线程中创建呢?一方面它是继承 自Handler,这个Handler需要在WebViewCoreThread线程中运行,所以需要在该线程来创建。另一方面在它的构造中需要创建 JWebCoreJavaBridge这个是C层的类,貌似这个类也需要在WebViewCoreThread线程中创建和销毁才行。

由上分析可知,WebView包含一个WebViewCore,WebViewCore包含一个BrowserFrame。多个 WebViewCore共同对应唯一的一个WebCoreThread。WebViewCore只是个外壳,WebCoreThread作为任务的处 理,WebCoreThread主要就是个大Handler不停的处理接收到的任务,WebCoreThread会调用很多jni来调用webkit接 口,BrowserFrame也有很多jni来调用webkit接口。由他们的组成情况又可知WebCoreThread直接调的jni是多个 WebView共同的,即不跟具体的WebView相关,而通过BrowserFrame调用的则跟一个具体的WebView相关了。

CallBackProxy

/**

 *This class is a proxy class for handling WebCore -> UI thread messaging. All

 *the callback functions are called from the WebCore thread and messages are

 *posted to the UI thread for the actual client callback.

 */

/*

 *This class is created in the UI thread so its handler and any private classes

 *that extend Handler will operate in the UI thread.

 */

class CallbackProxy extends Handler {

另外还有个类CallBackProxy。它存在于WebView,WebViewCore,BrowserFrame中。在WebView构造函 数中创建,并在WebViewCore和BrowserFrame构造函数中作为参数传入并赋值给它们内部的引用。可见CallBackProxy是 WebViewCore和BrowserFrame向WebView回调的桥梁。

CallBackProxy是一个Handler,它在主线程中被创建,即WebViewCore和BrowserFrame会通过发消息的方式将 需求传递到主线程的CallBackProxy中,CallBackProxy的事件处理循环会执行相应的处理。可见主线程中WebView通过 WebViewCore发消息给WebViewCoreThread线程执行操作,WebViewCoreThread线程又会通过 CallBackProxy回调消息给主线程执行处理。

再回到BrowserFrame.loadStarted处。

BrowserFrame.loadStarted会调用 CallBackProxy.onPageStarted,CallBackProxy.onPageStarted中会给发PAGE_STARTED消 息,主线程中的CallBackProxy的handleMessage会执行处理。在处理时会执行 WebViewClient.onPageStarted。

WebViewClient

mWebViewClient本身只是提供一个接口基类,Tab中private finalWebViewClient mWebViewClient = new WebViewClient()

// WebViewClient implementation for themain WebView

//Set the WebViewClient that will receivevarious notifications and requests. This will replace the current handler.

这个WebViewClient会传给Tab中的WebView的CallbackProxy。这个WebViewClient会让CallbackProxy返回信息或回调处理给Tab。

回到WebViewClient.onPageStarted,这里做了一些判断处理后,调用WebViewController.onPageStarted。

WebViewController

//WebView aspect of the controller

public interface WebViewController

在Tab的构造时,WebViewController会作为参数传入,并设置给Tab。那么Tab中的WebViewController到底是什么?Tab是在TabController中创建的,而Tab构造时传入的是Controller。

public class Controller implementsWebViewController, UiController

由此可见Tab中的WebViewController其实就是对应Controller。只是通过WebViewController接口作为引用的。即Tab中只关心Controller的WebViewController接口部分。

这样就可以看出BrowserFrame通过消息与主线程中的CallbackProxy处理循环关联,CallbackProxy又通过 WebViewClient与Tab关联,回调了Tab提供的接口,而Tab又通过WebViewController接口,调用了Controller 这个核心类的函数。即调用到WebViewController.onPageStarted,也即是 Controller.onPageStarted.

Controller.onPageStarted中一个主要的处理是

if (!mNetworkHandler.isNetworkUp()) {           view.setNetworkAvailable(false);       }这里判断网络是否是激活状态,如果不是激活 状态则执行WebView.SetNetworkAvailable(Boolean networkUp)

/**     * Inform WebView ofthe network state. This is used to set    * the JavaScript property window.navigator.isOnline and     * generates the online/offline event asspecified in HTML5, sec. 5.7.7     *@param networkUp boolean indicating if network is available     */

该函数其实就是像WebViewCore发送SET_NETWORK_STATE消息,好吧,又回到了WebViewCoreThread线程了, 处理的方式是直接BrowserFrame.sJavaBridge.setNetworkOnLine。这个函数是个jni函数,其调用的是c层 JavaBridge的函数。这个jni函数主要就是通知c层WebCore网路状态已经变化,并把最新的网络状态告诉WebCore。

由此可见WebView.setNetworkAvailable还是个挺重要的函数,通过它才能告诉底层网络的状态。

那么额外看下网络状态如何获取并传递的,在loadUrl发起加载url这块判断了一次,即当无网络时主动通知一次。其他的呢?

在NetworkStateHandler中会注册一个BroadcastReceiver,该receiver会关注 ConnectivityManager.CONNECTIVITY_ACTION广播,该广播是在网络发生连接变化时被发出,该receiver在接收 到网络连接变化的广播后,会查询当前的连接情况,然后执行NetworkStarteHandler.onNetworkToggle,这个函数里面就会 调用WebView.setNetworkAvailable,也即跟上述描述的那样,给WebViewCoreThread线程发消息,通知c层 WebCore网络的最新状态。

这样就清楚了,网络广播时会通知C层最新状态,在执行loadUrl时,如果网络不可用也会通知C层网络最新状态。

这里先跨过Controller.onPageStarte的其他处理过程。此次任务处理完毕。

此时WebViewCoreThread线程中BrowserFrame仍然处于c层的LoadUrl中,此时的调用栈为:

BrowserFrame.nativeLoadUrl

BrowserFrame.loadUrl

WebViewCore.loadUrl

这里又会回调BrowserFrame.shouldInterceptRequest,它会调用BrowserFrame.inputStreamForAndroidResource函数

 /**
     * Get the InputStream for an Android resource
     * There are three different kinds of android resources:
     * - file:///android_res
     * - file:///android_asset
     * - content://
     * @param url The url to load.
     * @return An InputStream to the android resource
     */

这个函数会对几种特殊的url做不同的处理,当输入一个标准的http的url时,该函数不起什么作用。

BrowserFrame.shouldInterceptReques接下来会调用 CallbackProxy.shouldInterceptRequest,看到调用CallbackProxy的函数,基本上就是要发消息给主线程让 主线程去处理任务了,这里发送了LOAD_RESOURCE消息,主线程接收后执行WebViewClient.onLoadResource。回到 BrowserFrame.nativeLoadUrl处,此时这个jni的函数终于执行完毕,也不再回调其他函数了,该函数完 成,WebViewCoreThread线程执行完LoadUrl的处理。

当没有连接网络时,有个单独的线程会执行JWebCoreJavaBridge.signalServiceFuncPtrQueue这个JNI的 回调函数,该回调函数会发FYBCPTR_MESSAGE消息给WebViewCoreThread线程,但处理函数是 JWebCoreJavaBridge.handle,由此可见WebViewCoreThread线程不仅仅有一个Handler在处理事件.

JWebCoreJavaBridge

JWebCoreJavaBridge extends Handler 可见JWebCoreJavaBridge也是个Handler也是在WebViewCoreThread线程中运行的,只是发送消息的线程不是主线程, 是另一个单独的线程,并且消息的发送来源是JNI的回调。

JWebCoreJavaBridge对应的JNI是webkit/Source/WebKit/android/jni/JavaBridge.cpp的函数。

JWebCoreJavaBridge处理FYBCPTR_MESSAGE消息时会调用一个JNI函数,在JNI函数里又会回调BrowserFrame.reportError。

又是跟上面类似的流程,BrowserFrame.reportError调用CallbackProxy.onReceiveError,这个 CallbackProxy里会发消息REPORT_ERROR,然后主线程接收消息,执行 WebViewClient.onReceivedError。

接着又是收到FUNCPTR_MESSAGE消息,调用nativeServiceFuncPtrQueue,但是这里回调了 BrowserFrame.loadStarted,然后的处理流程跟上述的LoadUrl中调用BrowserFrame.loadStarted过程 一样。

接着WebViewCoreThread线程又是收到FUNCPTR_MESSAGE消息,调用 JWebCoreJavaBridge.nativeServiceFuncPtrQueue,WebViewCore.contentDraw被调用, 该函数发送WEBKIT_DRAW,处理该消息会执行绘制的操作。

接着WebViewCoreThread线程中JWebCoreJavaBridge.handleMessage又被调用,还是 FUNCPTR_MESSAGE消息,仍然是调用nativeServiceFuncPtrQueue。但此时BrowserFrame收到 loadFinished的回调,发PAGE_FINISHED消息,主线程接收消息处理时会执行WebView.onPageFinished和 WebViewClient.onFinished.

http://blog.csdn.net/hxwwf/article/details/7281318
posted @ 2013-02-22 15:07 小果子 阅读(1631) | 评论 (0)编辑 收藏

1、使用软件更新的方式:

打开Eclipse -> Help -> Install New Software 然后在弹出对话框的 Work with 框中输入如下的地址,回车。

http://update.aptana.com/update/studio/3.2/

然后就会一步步选择需要安装的组件即可。

2、在Eclipse 4.2 上安装 Aptana 3.2遇到的错误,提示找不到 org.eclipse.update.ui 0.0.0

通过google(这种时候记得别使用百度),看到有同样的问题:

http://boards.developerforce.com/t5/General-Development/Trouble-with-Force-com-IDE-installation-in-Eclipse-4-2/m-p/480891#M73687

 

其中的有人回答:

Hi, After i am downloadinng org.eclipse.update.ui_3.2.300.v20100512.jar and org.eclipse.update.ui.source_3.2.300.v20100512.jar files from the below site and placed it under eclipse/plugins directory and it worked for me.http://grepcode.com/snapshot/repository.grepcode.com/java/eclipse.org/3.6/org.eclipse.update/ui/3.2.... thanks, Ravi
 
按照提示的这个网址,去下载 ui组件,放置到eclipse目录的 plugins 之中,重启eclipse,再次安装即可成功。
 
注:Eclipse 4.2的update ui,在这里:http://grepcode.com/search /?r=repository.grepcode.com$java$eclipse.org$4.2&start=20&query=org.eclipse.update+ui+3.2....&entity=project
 
另外如果要安装Aptana直接输入:http://download.aptana.com/studio3/plugin/install 进行更新即可。

Re: Trouble with Force.com IDE installation in Eclipse 4.2

‎08-09-2012 10:06 AM

Update:

 

In the post I linked above: http://boards.developerforce.com/t5/General-Development/Install-Eclipse-Juno-4-2-with-Force-com-IDE/..., there's been a solution that worked for me.

 

To Quote Zokito:

 

08-09-2012 09:04 AM

Hi,

 

cause of the problem lies here:

 

http://www.eclipse.org/eclipse/development/porting/4.2/incompatibilities.html

(search for org.eclipse.update.ui)

 

It should be possible to fetch the deependency automatically through the marketplace but for me it's not working.... so what would you need to do is install the org.eclipse.update.ui manually from e.g.

http://www.java2s.com/Code/Jar/o/Downloadorgeclipseupdateui32300v20100512jar.htm

 

 

extract it and than copy the jar file to your eclipse/plugins/ directory. 

Start Eclipse again and then try to install the Force IDE plugin.

 

 

this solved the issue for me

 

Hope this is helpful!

 

Kelly

posted @ 2013-02-22 10:25 小果子 阅读(1701) | 评论 (0)编辑 收藏

android root权限获取的教程有很多,为了让大家更进一步的了解root的奥秘所在,灵客风特为您奉献本文,希望对您有所帮助。

Android的应用程序入口肯定是java程序。应用程序的启动者是由系统临时根据Androidmanifest.xml中定义的权限而创建的临时用户。而不像linux那样是使用登陆者的身份启动,从而使得进程具有登陆者的所有权限。这也是Android的安全机制之一。

新的权限机制也带来新的问题,Android给应用程序的权限是按功能来分,java虽然可以访问文件系统。但由于应用程序本身是临时用户启动,这个临时用户权限十分有限。因此诞生了<越狱/root机器>这样的产物。

其实root机器不是真正能让你的应用程序具有root权限。它原理就跟linux下的像sudo这样的命令。在系统的bin目录下放个su程序并属主是root并有suid权限。则通过su执行的命令都具有Android root权限。

Su的源代码网上也有,有兴趣的同学去google下。

当然使用临时用户权限想把su拷贝的/system/bin目录并改属性并不是一件容易的事情。这里用到2个工具跟2个命令。工具就是busybox。不熟悉的同学可以去网上google下。这个太有名了我就不多说了。

把busybox拷贝到你有权限访问的目录然后给他赋予4755权限,你就可以用它做很多事了。

当然busybox只能不能提升权限,真正提升权限的是ratc这个程序,这个程序中一键root包里面可以找到,作用是rooting在adb的shell。

网上介绍Ratc的文章不多,它是rage against the cage 的缩写。是真正的提升权限的破解程序。虽然我没看过源代码,但估计是利用adb源代码部分内容来实现的,原理估计跟模拟器使用adb shell登陆可以获得root shell差不多。(因为它运行需要adb连接才会成功)。

使用busybox前先运行ratc,这样运行busybox的UID将是0,也就是root。

首先把system目录改成可读性的:busybox mount -o remount,rw /system,

当然你还不能改下面的文件,因为system下文件的所有者都不是你。

但你可以偷梁换柱把system下的目录给换掉。

使用命令Busybox mount -t tmpfs none /system/xbin,呵呵这下xbin目录你随便写了。

将su跟busybox弄过去cp /data/data/xxx/su /system/xbin。然后赋权限chmod 4755 /system/xbin/su。

然后使目录生效busybox --install -s /system/xbin,

别忘善后busybox mount -o remount,ro /system去掉system可写。

这样只是临时的,只能用su跟busybox能执行一些原来系统没有权限执行的命令而已。当系统重启后/system/xbin又变为原来的文件。 真正要改系统的话需要自己写内核代码(相当于windows的驱动程序)。内核文件拥有所有权限。使用busybox命令insmod /data/data/xxx/xxx.ko装载内核文件,你想干嘛就可以干嘛了。

当然我们不是搞破解的没必要去改别人的机器,我们只是想让自己应用程序具有root权限而已。所以临时的su就可以了。我们用c++写一个可执行文 件。使用socket可以跟java的程序通讯。然后将需要使用root权限才能执行的代码放在c++程序里,然后java程序中创建新的su进程,将 c++程序带全路径作为参数1。启动后就可以通过socket调用c++函数去执行你想干的事了。

最后程序执行完了别忘了善后busybox umount /system/xbin。

最后说说要注意的事情,如果机器已经拥有Android root权限的话就不需要做这些事情了,但root过的机器都有装有个权限管理的程序。会弹出对话框。但这个程序管理能力有限,如果不想让他弹出的话。也许可以通过改su文件名来解决。有兴趣的同学不妨试试。


现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的 软件,使root破解越来越容易。但是你思考过root破解的原理吗?root破解的本质是什么呢?难道是利用了Linux kernal的漏洞吗?本文将简单对root的破解原理进行分析。

     网上有一篇文章已经对root破解的基本原理进行了简单介绍,大家可以先参考一下《android root权限破解分析》,本文只能说对root原理进行了方向性的描述,但是在一些具体的方面没有描述清楚。本文将会对其进行一些必要的扩展和补充。

     如果你进行过程序开发,在root过的手机上面获得root权限的代码如下:

  1. Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream());  
  2. ......  
  3. os.writeBytes("exit\n");  
  4. os.flush();  

     从上面代码我们可以看到首先要运行su程序,其实root的秘密都在su程序中,《android root权限破解分析》中讲到Android系统默认的su程序只能root和shell可以用运行su,这个是安全的。如果把这个限制拿掉,就是root破解了!

     下面我们仔细分析一下程序是怎样获得root权限的,如果对Linux的su命令熟悉的朋友可能知道su程序都设置SUID位,我们查看一下我的手机(已经root破解)上的su权限设置,

      我们发现su的所有者和所有组都是root,是其实是busybox的软链接,我们查看busybox的属性发现,其设置了SUID和SGID,并且所有者和所有组都是root。SUID和SGID的作用是什么呢?如果你不太清楚,请参考《Linux进程的实际用户ID和有效用户ID》,这样运行busybox的普通用户,busybox运行过程中获得的是root的有效用户。su程序则是把自己启动一个新的程序,并把自己权限提升至root(我们前面提到su其实就是busybox,运行期它的权限是root,当然也有权限来提升自己的权限)。

     再强调一下不光root手机上su需要设置SUID,所有的Linux系统上的su程序都需要设置SUID位。请参考一下UC服务器的su的权限情况:

     我们发现su也设置了SUID位,这样普通用户也可以运行su程序,su程序会验证root密码,如果正确su程序可以把用户权限提高的root(因为其设置SUID位,运行期是root权限,这样其有权限提升自己的权限)。

     这样我们就可以看出其实Android系统的破解的根本原理就是替换掉系统中的su程序,因为系统中的默认su程序需要验证实际用户权限(只有root和 shell用户才有权运行系统默认的su程序,其他用户运行都会返回错误)。而破解后的su将不检查实际用户权限,这样普通的用户也将可以运行su程序, 也可以通过su程序将自己的权限提升。

     到这里大家对root破解不感到神秘了吧。root破解没有利用什么Linux内核漏洞(Linux内核不可能有这么大的漏洞存在),可以理解成root 破解就是在你系统中植入“木马su”,说它是“木马”一点儿都不为过,假如恶意程序在系统中运行也可以通过su来提升自己的权限的这样的结果将会是灾难性 的。所以一般情况下root过手机都会有一个SuperUser应用程序来让用户管理允许谁获得root权限,也算是给系统加了一层保险吧!

     如上是Simon的个人对root破解的一些认识,如果有错误的地方,欢迎朋友们指正.

posted @ 2013-02-20 16:07 小果子 阅读(7634) | 评论 (0)编辑 收藏
– Makefile (全局的Makefile文件)
– bionic (Bionic含义为仿生,这里面是一些基础的C库源代码)
– bootloader (引导加载器)
build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)
– build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)
– cts (Android兼容性测试套件标准)
– libcore (核心库相关)
Dalvik虚拟机 针对嵌入式设备优化的Java
Java虚拟机)
– dalvik ( Dalvik虚拟机,针对嵌入式设备优化的Java虚拟机)
– development (创建应用程序所需要的模板和工具)
qcom,
– device (与具体设备相关的一些编译脚本和库,如htc,qcom,samsung等)
– external (Android使用的一些外部的开源框架和库)
(应用程序的框架层,SDK
SDK的接口基本都是在这里实现的)
– frameworks (应用程序的框架层,SDK的接口基本都是在这里实现的)
– hardware (与硬件相关的库)
Linux2.6
– kernel (Linux2.6的内核源代码)
– ndk (本地开发套件--C语言开发套件)
--C
Android的各种应用程序)
– packages (Android的各种应用程序)
– prebuilt (Android在各种平台下编译的预置脚本)
– sdk (SDK及模拟器)
Android的底层的一些库)
– system (Android的底层的一些库)
`– vendor (厂商私有的代码)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
packages/
|– apps (各种应用程序,如联系人、浏览器等)
|– experimental (一些实验性的项目,如错误报告)
|– inputmethods (输入法相关)
|– providers (各种数据源实现,如联系人数据、媒体库等信息)
|– wallpapers (各种壁纸程序)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Android Framework功能介绍
android.app :提供高层的程序模型和基本的运行环境。
android.content :包含对各种设备上的数据进行访问和发布。
android.database :通过内容提供者浏览和操作数据库。
android.graphics :底层图形库,包含画布、点、矩形等,可以将其直接绘制到屏幕上。
android.location :定位和相关服务的类。
android.media :提供一些类管理多种音频、视频的媒体接口。
android.net :提供帮助网络访问的类,超过通常的 java.net.* 接口。
android.os :提供了系统服务、消息传输和 IPC 机制。
android.opengl :提供 OpenGL 的工具。
android.provider :提供访问 Android 内容提供者的类。
android.telephony :提供与拨打电话相关的 API 交互。
android.view :提供基础的用户界面接口框架。
android.util :涉及工具性的方法,例如时间日期的操作。
android.webkit :默认浏览器操作接口。
android.widget :包含各种 UI 元素(大部分是可见的)在应用程序的布局中使用
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/
|– buildspec.mk.default
|– cleanspec.mk
|– core (各种以mk为结尾的文件,它门是编译所需要的Makefile)
|– envsetup.sh
|– libs
|– target (包含board和product两个目录,为目标所需要文件)
|– tools (编译过程中主机所需要的工具,一些需要经过编译生成)
其中,core中的Makefile是整个Android编译所需要的真正的Makefile,它被顶层目录的Makefile引用。
基本介绍到此,文章参考网络中各种文章,如果有侵权啥行为的,请联系删除。
posted @ 2013-02-20 14:16 小果子 阅读(505) | 评论 (0)编辑 收藏
仅列出标题
共58页: 1 2 3 4 5 6 7 8 9 Last