青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

xiaoguozi's Blog
Pay it forword - 我并不覺的自豪,我所嘗試的事情都失敗了······習(xí)慣原本生活的人不容易改變,就算現(xiàn)狀很糟,他們也很難改變,在過程中,他們還是放棄了······他們一放棄,大家就都是輸家······讓愛傳出去,很困難,也無法預(yù)料,人們需要更細(xì)心的觀察別人,要隨時注意才能保護(hù)別人,因為他們未必知道自己要什么·····

iOS通過讓本地代碼攔截JavaScript中調(diào)用的 window.location=”gap://Class.method/args”命令,來實現(xiàn)從JavaScript到本地代碼之間的通信。在本地 代碼攔截該命令后,解析獲取的參數(shù),然后調(diào)用對應(yīng)的類、方法并傳遞參數(shù)。對應(yīng)的,使用 UIWebView.stringByEvaluatingJavaScriptFromString來實現(xiàn)本地代碼調(diào)用JavaScript。

Android通 過攔截JavaScript的prompt命令實現(xiàn)從JavaScript到本地代碼的通信。JavaScript prompt命令默認(rèn)會彈出對話框,而PhoneGap的Android本地代碼會攔截該對話框,并進(jìn)一步取得JavaScript數(shù)據(jù)。相應(yīng) 的,Android上的PhoneGap內(nèi)部,使用Java實現(xiàn)了一個HTTP服務(wù)器,通過持久性的XHR連接,JavaScript可以不斷輪詢內(nèi)部 XHR服務(wù)器存儲的信息,從而實現(xiàn)了從Java到JavaScript方向的通信。

BlackBerry 4.xJavaScript 與本地代碼之間的唯一通信方式是通過document.cookie實現(xiàn)的。JavaScript設(shè)定Cookie,本地代碼從Cookie中獲取信息。 對應(yīng)的,本地代碼也可以設(shè)定Cookie,允許JavaScript從Cookie中獲取本地代碼信息。

BlackBerry WebWorks新 的BlackBerry WebWorks SDK更好地支持了Java與JavaScript之間的交互通信。通過ScriptEngine.addExtension,Java對象可以被暴露給 JavaScript,而對應(yīng)的Java可以使用ScriptEngine.executeScript來調(diào)用JavaScript。

Windows Phone 7在Windows Phone 7中,JavaScript通過window.external.Notify可以將信息發(fā)送給本地代碼。而相應(yīng)的,WebBrowser.InvokeScript允許本地代碼調(diào)用JavaScript。

posted @ 2013-02-22 15:16 小果子 閱讀(1632) | 評論 (0)編輯 收藏

瀏覽器探究——執(zhí)行網(wǎng)頁跳轉(zhuǎn)

Main線程中執(zhí)行。

UrlInputView

控件UrlInputView執(zhí)行OnEditorAction->finishInput

/**

 *url/search input view

 *handling suggestions

 */

public class UrlInputView extendsAutoCompleteTextView

       implements OnEditorActionListener,

       CompletionListener, OnItemClickListener, TextWatcher

由此可見,UrlInputView即輸入網(wǎng)址的那個控件,該控件包括輸入URL和執(zhí)行搜索輸入。

Controller

在經(jīng)過UrlInputView的處理后,會調(diào)用Controller.handleNewIntent。

Controller是瀏覽器中最重要的類,作為整個瀏覽器的主控類。Controller中有IntentHandler,這里會調(diào)用IntentHandler.onNewIntent

IntentHandler

//Handle all browser related intents

這里對一些特殊的URL做處理這里還包含了一些debug信息,比如”about:debug.dom.file"這種形式的網(wǎng)址。如果是普通的 url,不需要做特殊處理,則執(zhí)行到最后執(zhí)行Controller.loadUrlDataIn,即經(jīng)過了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.

    */

經(jīng)過簡單的處理,會把要加載的url作為參數(shù)調(diào)用被顯示的tab,即執(zhí)行Tab.loadUrl。這樣看來Controller還只是個橋梁的作 用,把從UrlInputView得到的url,交給IntentHandler做處理,然后再把url交給Tab做實際的加載。

Tab

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

Tab作為一個窗口的抽象概念而存在,對一個窗口的操作都需要通過Tab來進(jìn)入。另外有個TabControl用來管理所有的Tab.

執(zhí)行語句mMainView.loadUrl。這個mMainView是個WebView。從這終于進(jìn)入了framework的webkit層了。

WebView

WebView作為Tab的核心控件,負(fù)責(zé)網(wǎng)頁的真正的加載,顯示等操作,是framework/webkit中最主要的類。通過Tab來找到WebView.

在WebView.loadUrl->WebView.loadUrlImpl中會向WebViewCore發(fā)消息,

WebViewCore

該類在一個獨立的線程中運行,該類主要通過Message,Handler的機制在WebView與WebViewCore之間通訊的,這里 WebView是在Main線程中,而WebViewCore是在單獨的 WebViewCoreThread線程中。WebViewCore是 framework/webkit核心類,它在單獨的線程中來接收消息,每個消息相當(dāng)于一個請求的任務(wù),而這個WebViewCore相當(dāng)于一個服務(wù),它 在消息循環(huán)中不停的接收任務(wù)(消息),然后處理任務(wù),然后再接收下一個任務(wù)(消息)。任務(wù)的執(zhí)行很多是通過jni調(diào)用c層webkit來操作的。在c層 webkit有webkit/Source/WebKit/android/jni/WebViewCore.cpp與該java層的 WebViewCore對應(yīng)。即這個WebViewCore是java層與c層的一個主要橋梁。

在WebView.loadUrlImpl在執(zhí)行了mWebViewCore.sendMessage(EventHub.LOAD_URL, arg);則WebViewCore接收到LOAD_URL任務(wù),執(zhí)行對它的處理。

WebViewCore中有BrowserFrame成員

BrowserFrame

BrowserFrame extends Handler它也有很多JNI與C層的webkit的Webkit/Source/WebKit/android/jni /WebCoreFrameBridge.cpp對應(yīng)。它用來處理頁面的具體情況,即Frame,這個Frame是一個具體的頁面的概念。

WebViewCore.loadUrl會調(diào)用BrowserFrame.loadUrl。BrowserFrame會調(diào)用到WebCoreFrameBridge.cpp的LoadUrl。

這里略去c層的處理部分。

WebCoreFrameBridge.cpp的LoadUrl執(zhí)行后會執(zhí)行到WebCoreFrameBridge.cpp的loadStarted,這里又會回調(diào)BrowserFrame.loadStarted函數(shù)。

/**

    * native callback

    * Indicates the beginning of a new load.

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

    */

即通過BrowserFrame的loadUrl在c層做處理后,又回調(diào)到BrowserFrame的loadStarted。

這里在理一下,主線程中有Tab,Tab里有WebView。即WebView也是運行在主線程的。而WebView里有WebViewCore,WebViewCore又是運行在一個單獨的線程里的。

那么多個WebView是否就對應(yīng)多個WebViewCore和多個WebViewCore線程呢?

看下WebView,WebView的構(gòu)造函數(shù)中會mWebViewCore= new WebViewCore(context, this, mCallbackProxy, javaScriptInterfaces);創(chuàng)建了WebViewCore對象,即每個WebView都有個WebViewCore對象。但是 WebViewCore中的WebCoreThread是一個靜態(tài)的,即一個單例的。而這個WebCoreThread中運行的 privatestatic Handler sWebCoreHandler;也是個靜態(tài)的。

由此可見WebViewCore類本身就是個外殼,真正處理任務(wù)的是WebCoreThread及其里面的sWebCoreHandler,這個真 正處理任務(wù)的是靜態(tài)的,只有一份,WebViewCore這個外殼只是溝通webView與WebCoreThread的橋梁,相當(dāng)于一個代理類。是 WebCoreThread提供給外面的處理接口。

那么BrowserFrame呢?在WebViewCore的構(gòu)造最后會發(fā)送一個INITIALIZE的消息給 WebCoreThread,WebCoreThread接收到后會執(zhí)行WebViewCore.initialize,這個函數(shù)會構(gòu)造 mrowserFrame。即每次構(gòu)造WebViewCore時同樣會構(gòu)造一個BrowserFrame。但是為什么不在主線程中創(chuàng)建呢?一方面它是繼承 自Handler,這個Handler需要在WebViewCoreThread線程中運行,所以需要在該線程來創(chuàng)建。另一方面在它的構(gòu)造中需要創(chuàng)建 JWebCoreJavaBridge這個是C層的類,貌似這個類也需要在WebViewCoreThread線程中創(chuàng)建和銷毀才行。

由上分析可知,WebView包含一個WebViewCore,WebViewCore包含一個BrowserFrame。多個 WebViewCore共同對應(yīng)唯一的一個WebCoreThread。WebViewCore只是個外殼,WebCoreThread作為任務(wù)的處 理,WebCoreThread主要就是個大Handler不停的處理接收到的任務(wù),WebCoreThread會調(diào)用很多jni來調(diào)用webkit接 口,BrowserFrame也有很多jni來調(diào)用webkit接口。由他們的組成情況又可知WebCoreThread直接調(diào)的jni是多個 WebView共同的,即不跟具體的WebView相關(guān),而通過BrowserFrame調(diào)用的則跟一個具體的WebView相關(guān)了。

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構(gòu)造函 數(shù)中創(chuàng)建,并在WebViewCore和BrowserFrame構(gòu)造函數(shù)中作為參數(shù)傳入并賦值給它們內(nèi)部的引用??梢奀allBackProxy是 WebViewCore和BrowserFrame向WebView回調(diào)的橋梁。

CallBackProxy是一個Handler,它在主線程中被創(chuàng)建,即WebViewCore和BrowserFrame會通過發(fā)消息的方式將 需求傳遞到主線程的CallBackProxy中,CallBackProxy的事件處理循環(huán)會執(zhí)行相應(yīng)的處理。可見主線程中WebView通過 WebViewCore發(fā)消息給WebViewCoreThread線程執(zhí)行操作,WebViewCoreThread線程又會通過 CallBackProxy回調(diào)消息給主線程執(zhí)行處理。

再回到BrowserFrame.loadStarted處。

BrowserFrame.loadStarted會調(diào)用 CallBackProxy.onPageStarted,CallBackProxy.onPageStarted中會給發(fā)PAGE_STARTED消 息,主線程中的CallBackProxy的handleMessage會執(zhí)行處理。在處理時會執(zhí)行 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返回信息或回調(diào)處理給Tab。

回到WebViewClient.onPageStarted,這里做了一些判斷處理后,調(diào)用WebViewController.onPageStarted。

WebViewController

//WebView aspect of the controller

public interface WebViewController

在Tab的構(gòu)造時,WebViewController會作為參數(shù)傳入,并設(shè)置給Tab。那么Tab中的WebViewController到底是什么?Tab是在TabController中創(chuàng)建的,而Tab構(gòu)造時傳入的是Controller。

public class Controller implementsWebViewController, UiController

由此可見Tab中的WebViewController其實就是對應(yīng)Controller。只是通過WebViewController接口作為引用的。即Tab中只關(guān)心Controller的WebViewController接口部分。

這樣就可以看出BrowserFrame通過消息與主線程中的CallbackProxy處理循環(huán)關(guān)聯(lián),CallbackProxy又通過 WebViewClient與Tab關(guān)聯(lián),回調(diào)了Tab提供的接口,而Tab又通過WebViewController接口,調(diào)用了Controller 這個核心類的函數(shù)。即調(diào)用到WebViewController.onPageStarted,也即是 Controller.onPageStarted.

Controller.onPageStarted中一個主要的處理是

if (!mNetworkHandler.isNetworkUp()) {           view.setNetworkAvailable(false);       }這里判斷網(wǎng)絡(luò)是否是激活狀態(tài),如果不是激活 狀態(tài)則執(zhí)行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     */

該函數(shù)其實就是像WebViewCore發(fā)送SET_NETWORK_STATE消息,好吧,又回到了WebViewCoreThread線程了, 處理的方式是直接BrowserFrame.sJavaBridge.setNetworkOnLine。這個函數(shù)是個jni函數(shù),其調(diào)用的是c層 JavaBridge的函數(shù)。這個jni函數(shù)主要就是通知c層WebCore網(wǎng)路狀態(tài)已經(jīng)變化,并把最新的網(wǎng)絡(luò)狀態(tài)告訴WebCore。

由此可見WebView.setNetworkAvailable還是個挺重要的函數(shù),通過它才能告訴底層網(wǎng)絡(luò)的狀態(tài)。

那么額外看下網(wǎng)絡(luò)狀態(tài)如何獲取并傳遞的,在loadUrl發(fā)起加載url這塊判斷了一次,即當(dāng)無網(wǎng)絡(luò)時主動通知一次。其他的呢?

在NetworkStateHandler中會注冊一個BroadcastReceiver,該receiver會關(guān)注 ConnectivityManager.CONNECTIVITY_ACTION廣播,該廣播是在網(wǎng)絡(luò)發(fā)生連接變化時被發(fā)出,該receiver在接收 到網(wǎng)絡(luò)連接變化的廣播后,會查詢當(dāng)前的連接情況,然后執(zhí)行NetworkStarteHandler.onNetworkToggle,這個函數(shù)里面就會 調(diào)用WebView.setNetworkAvailable,也即跟上述描述的那樣,給WebViewCoreThread線程發(fā)消息,通知c層 WebCore網(wǎng)絡(luò)的最新狀態(tài)。

這樣就清楚了,網(wǎng)絡(luò)廣播時會通知C層最新狀態(tài),在執(zhí)行l(wèi)oadUrl時,如果網(wǎng)絡(luò)不可用也會通知C層網(wǎng)絡(luò)最新狀態(tài)。

這里先跨過Controller.onPageStarte的其他處理過程。此次任務(wù)處理完畢。

此時WebViewCoreThread線程中BrowserFrame仍然處于c層的LoadUrl中,此時的調(diào)用棧為:

BrowserFrame.nativeLoadUrl

BrowserFrame.loadUrl

WebViewCore.loadUrl

這里又會回調(diào)BrowserFrame.shouldInterceptRequest,它會調(diào)用BrowserFrame.inputStreamForAndroidResource函數(shù)

 /**
     * 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
     */

這個函數(shù)會對幾種特殊的url做不同的處理,當(dāng)輸入一個標(biāo)準(zhǔn)的http的url時,該函數(shù)不起什么作用。

BrowserFrame.shouldInterceptReques接下來會調(diào)用 CallbackProxy.shouldInterceptRequest,看到調(diào)用CallbackProxy的函數(shù),基本上就是要發(fā)消息給主線程讓 主線程去處理任務(wù)了,這里發(fā)送了LOAD_RESOURCE消息,主線程接收后執(zhí)行WebViewClient.onLoadResource?;氐?BrowserFrame.nativeLoadUrl處,此時這個jni的函數(shù)終于執(zhí)行完畢,也不再回調(diào)其他函數(shù)了,該函數(shù)完 成,WebViewCoreThread線程執(zhí)行完LoadUrl的處理。

當(dāng)沒有連接網(wǎng)絡(luò)時,有個單獨的線程會執(zhí)行JWebCoreJavaBridge.signalServiceFuncPtrQueue這個JNI的 回調(diào)函數(shù),該回調(diào)函數(shù)會發(fā)FYBCPTR_MESSAGE消息給WebViewCoreThread線程,但處理函數(shù)是 JWebCoreJavaBridge.handle,由此可見WebViewCoreThread線程不僅僅有一個Handler在處理事件.

JWebCoreJavaBridge

JWebCoreJavaBridge extends Handler 可見JWebCoreJavaBridge也是個Handler也是在WebViewCoreThread線程中運行的,只是發(fā)送消息的線程不是主線程, 是另一個單獨的線程,并且消息的發(fā)送來源是JNI的回調(diào)。

JWebCoreJavaBridge對應(yīng)的JNI是webkit/Source/WebKit/android/jni/JavaBridge.cpp的函數(shù)。

JWebCoreJavaBridge處理FYBCPTR_MESSAGE消息時會調(diào)用一個JNI函數(shù),在JNI函數(shù)里又會回調(diào)BrowserFrame.reportError。

又是跟上面類似的流程,BrowserFrame.reportError調(diào)用CallbackProxy.onReceiveError,這個 CallbackProxy里會發(fā)消息REPORT_ERROR,然后主線程接收消息,執(zhí)行 WebViewClient.onReceivedError。

接著又是收到FUNCPTR_MESSAGE消息,調(diào)用nativeServiceFuncPtrQueue,但是這里回調(diào)了 BrowserFrame.loadStarted,然后的處理流程跟上述的LoadUrl中調(diào)用BrowserFrame.loadStarted過程 一樣。

接著WebViewCoreThread線程又是收到FUNCPTR_MESSAGE消息,調(diào)用 JWebCoreJavaBridge.nativeServiceFuncPtrQueue,WebViewCore.contentDraw被調(diào)用, 該函數(shù)發(fā)送WEBKIT_DRAW,處理該消息會執(zhí)行繪制的操作。

接著WebViewCoreThread線程中JWebCoreJavaBridge.handleMessage又被調(diào)用,還是 FUNCPTR_MESSAGE消息,仍然是調(diào)用nativeServiceFuncPtrQueue。但此時BrowserFrame收到 loadFinished的回調(diào),發(fā)PAGE_FINISHED消息,主線程接收消息處理時會執(zhí)行WebView.onPageFinished和 WebViewClient.onFinished.

http://blog.csdn.net/hxwwf/article/details/7281318
posted @ 2013-02-22 15:07 小果子 閱讀(1671) | 評論 (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
 
按照提示的這個網(wǎng)址,去下載 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 進(jìn)行更新即可。

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 小果子 閱讀(1732) | 評論 (0)編輯 收藏

android root權(quán)限獲取的教程有很多,為了讓大家更進(jìn)一步的了解root的奧秘所在,靈客風(fēng)特為您奉獻(xiàn)本文,希望對您有所幫助。

Android的應(yīng)用程序入口肯定是java程序。應(yīng)用程序的啟動者是由系統(tǒng)臨時根據(jù)Androidmanifest.xml中定義的權(quán)限而創(chuàng)建的臨時用戶。而不像linux那樣是使用登陸者的身份啟動,從而使得進(jìn)程具有登陸者的所有權(quán)限。這也是Android的安全機制之一。

新的權(quán)限機制也帶來新的問題,Android給應(yīng)用程序的權(quán)限是按功能來分,java雖然可以訪問文件系統(tǒng)。但由于應(yīng)用程序本身是臨時用戶啟動,這個臨時用戶權(quán)限十分有限。因此誕生了<越獄/root機器>這樣的產(chǎn)物。

其實root機器不是真正能讓你的應(yīng)用程序具有root權(quán)限。它原理就跟linux下的像sudo這樣的命令。在系統(tǒng)的bin目錄下放個su程序并屬主是root并有suid權(quán)限。則通過su執(zhí)行的命令都具有Android root權(quán)限。

Su的源代碼網(wǎng)上也有,有興趣的同學(xué)去google下。

當(dāng)然使用臨時用戶權(quán)限想把su拷貝的/system/bin目錄并改屬性并不是一件容易的事情。這里用到2個工具跟2個命令。工具就是busybox。不熟悉的同學(xué)可以去網(wǎng)上google下。這個太有名了我就不多說了。

把busybox拷貝到你有權(quán)限訪問的目錄然后給他賦予4755權(quán)限,你就可以用它做很多事了。

當(dāng)然busybox只能不能提升權(quán)限,真正提升權(quán)限的是ratc這個程序,這個程序中一鍵root包里面可以找到,作用是rooting在adb的shell。

網(wǎng)上介紹Ratc的文章不多,它是rage against the cage 的縮寫。是真正的提升權(quán)限的破解程序。雖然我沒看過源代碼,但估計是利用adb源代碼部分內(nèi)容來實現(xiàn)的,原理估計跟模擬器使用adb shell登陸可以獲得root shell差不多。(因為它運行需要adb連接才會成功)。

使用busybox前先運行ratc,這樣運行busybox的UID將是0,也就是root。

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

當(dāng)然你還不能改下面的文件,因為system下文件的所有者都不是你。

但你可以偷梁換柱把system下的目錄給換掉。

使用命令Busybox mount -t tmpfs none /system/xbin,呵呵這下xbin目錄你隨便寫了。

將su跟busybox弄過去cp /data/data/xxx/su /system/xbin。然后賦權(quán)限chmod 4755 /system/xbin/su。

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

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

這樣只是臨時的,只能用su跟busybox能執(zhí)行一些原來系統(tǒng)沒有權(quán)限執(zhí)行的命令而已。當(dāng)系統(tǒng)重啟后/system/xbin又變?yōu)樵瓉淼奈募?真正要改系統(tǒng)的話需要自己寫內(nèi)核代碼(相當(dāng)于windows的驅(qū)動程序)。內(nèi)核文件擁有所有權(quán)限。使用busybox命令insmod /data/data/xxx/xxx.ko裝載內(nèi)核文件,你想干嘛就可以干嘛了。

當(dāng)然我們不是搞破解的沒必要去改別人的機器,我們只是想讓自己應(yīng)用程序具有root權(quán)限而已。所以臨時的su就可以了。我們用c++寫一個可執(zhí)行文 件。使用socket可以跟java的程序通訊。然后將需要使用root權(quán)限才能執(zhí)行的代碼放在c++程序里,然后java程序中創(chuàng)建新的su進(jìn)程,將 c++程序帶全路徑作為參數(shù)1。啟動后就可以通過socket調(diào)用c++函數(shù)去執(zhí)行你想干的事了。

最后程序執(zhí)行完了別忘了善后busybox umount /system/xbin。

最后說說要注意的事情,如果機器已經(jīng)擁有Android root權(quán)限的話就不需要做這些事情了,但root過的機器都有裝有個權(quán)限管理的程序。會彈出對話框。但這個程序管理能力有限,如果不想讓他彈出的話。也許可以通過改su文件名來解決。有興趣的同學(xué)不妨試試。


現(xiàn)在Android系統(tǒng)的root破解基本上成為大家的必備技能!網(wǎng)上也有很多中一鍵破解的 軟件,使root破解越來越容易。但是你思考過root破解的原理嗎?root破解的本質(zhì)是什么呢?難道是利用了Linux kernal的漏洞嗎?本文將簡單對root的破解原理進(jìn)行分析。

     網(wǎng)上有一篇文章已經(jīng)對root破解的基本原理進(jìn)行了簡單介紹,大家可以先參考一下《android root權(quán)限破解分析》,本文只能說對root原理進(jìn)行了方向性的描述,但是在一些具體的方面沒有描述清楚。本文將會對其進(jìn)行一些必要的擴展和補充。

     如果你進(jìn)行過程序開發(fā),在root過的手機上面獲得root權(quán)限的代碼如下:

  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權(quán)限破解分析》中講到Android系統(tǒng)默認(rèn)的su程序只能root和shell可以用運行su,這個是安全的。如果把這個限制拿掉,就是root破解了!

     下面我們仔細(xì)分析一下程序是怎樣獲得root權(quán)限的,如果對Linux的su命令熟悉的朋友可能知道su程序都設(shè)置SUID位,我們查看一下我的手機(已經(jīng)root破解)上的su權(quán)限設(shè)置,

      我們發(fā)現(xiàn)su的所有者和所有組都是root,是其實是busybox的軟鏈接,我們查看busybox的屬性發(fā)現(xiàn),其設(shè)置了SUID和SGID,并且所有者和所有組都是root。SUID和SGID的作用是什么呢?如果你不太清楚,請參考《Linux進(jìn)程的實際用戶ID和有效用戶ID》,這樣運行busybox的普通用戶,busybox運行過程中獲得的是root的有效用戶。su程序則是把自己啟動一個新的程序,并把自己權(quán)限提升至root(我們前面提到su其實就是busybox,運行期它的權(quán)限是root,當(dāng)然也有權(quán)限來提升自己的權(quán)限)。

     再強調(diào)一下不光root手機上su需要設(shè)置SUID,所有的Linux系統(tǒng)上的su程序都需要設(shè)置SUID位。請參考一下UC服務(wù)器的su的權(quán)限情況:

     我們發(fā)現(xiàn)su也設(shè)置了SUID位,這樣普通用戶也可以運行su程序,su程序會驗證root密碼,如果正確su程序可以把用戶權(quán)限提高的root(因為其設(shè)置SUID位,運行期是root權(quán)限,這樣其有權(quán)限提升自己的權(quán)限)。

     這樣我們就可以看出其實Android系統(tǒng)的破解的根本原理就是替換掉系統(tǒng)中的su程序,因為系統(tǒng)中的默認(rèn)su程序需要驗證實際用戶權(quán)限(只有root和 shell用戶才有權(quán)運行系統(tǒng)默認(rèn)的su程序,其他用戶運行都會返回錯誤)。而破解后的su將不檢查實際用戶權(quán)限,這樣普通的用戶也將可以運行su程序, 也可以通過su程序?qū)⒆约旱臋?quán)限提升。

     到這里大家對root破解不感到神秘了吧。root破解沒有利用什么Linux內(nèi)核漏洞(Linux內(nèi)核不可能有這么大的漏洞存在),可以理解成root 破解就是在你系統(tǒng)中植入“木馬su”,說它是“木馬”一點兒都不為過,假如惡意程序在系統(tǒng)中運行也可以通過su來提升自己的權(quán)限的這樣的結(jié)果將會是災(zāi)難性 的。所以一般情況下root過手機都會有一個SuperUser應(yīng)用程序來讓用戶管理允許誰獲得root權(quán)限,也算是給系統(tǒng)加了一層保險吧!

     如上是Simon的個人對root破解的一些認(rèn)識,如果有錯誤的地方,歡迎朋友們指正.

posted @ 2013-02-20 16:07 小果子 閱讀(7696) | 評論 (0)編輯 收藏
– Makefile (全局的Makefile文件)
– bionic (Bionic含義為仿生,這里面是一些基礎(chǔ)的C庫源代碼)
– bootloader (引導(dǎo)加載器)
build目錄中的內(nèi)容不是目標(biāo)所用的代碼,而是編譯和配置所需要的腳本和工具)
– build (build目錄中的內(nèi)容不是目標(biāo)所用的代碼,而是編譯和配置所需要的腳本和工具)
– cts (Android兼容性測試套件標(biāo)準(zhǔn))
– libcore (核心庫相關(guān))
Dalvik虛擬機 針對嵌入式設(shè)備優(yōu)化的Java
Java虛擬機)
– dalvik ( Dalvik虛擬機,針對嵌入式設(shè)備優(yōu)化的Java虛擬機)
– development (創(chuàng)建應(yīng)用程序所需要的模板和工具)
qcom,
– device (與具體設(shè)備相關(guān)的一些編譯腳本和庫,如htc,qcom,samsung等)
– external (Android使用的一些外部的開源框架和庫)
(應(yīng)用程序的框架層,SDK
SDK的接口基本都是在這里實現(xiàn)的)
– frameworks (應(yīng)用程序的框架層,SDK的接口基本都是在這里實現(xiàn)的)
– hardware (與硬件相關(guān)的庫)
Linux2.6
– kernel (Linux2.6的內(nèi)核源代碼)
– ndk (本地開發(fā)套件--C語言開發(fā)套件)
--C
Android的各種應(yīng)用程序)
– packages (Android的各種應(yīng)用程序)
– prebuilt (Android在各種平臺下編譯的預(yù)置腳本)
– sdk (SDK及模擬器)
Android的底層的一些庫)
– system (Android的底層的一些庫)
`– vendor (廠商私有的代碼)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
packages/
|– apps (各種應(yīng)用程序,如聯(lián)系人、瀏覽器等)
|– experimental (一些實驗性的項目,如錯誤報告)
|– inputmethods (輸入法相關(guān))
|– providers (各種數(shù)據(jù)源實現(xiàn),如聯(lián)系人數(shù)據(jù)、媒體庫等信息)
|– wallpapers (各種壁紙程序)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Android Framework功能介紹
android.app :提供高層的程序模型和基本的運行環(huán)境。
android.content :包含對各種設(shè)備上的數(shù)據(jù)進(jìn)行訪問和發(fā)布。
android.database :通過內(nèi)容提供者瀏覽和操作數(shù)據(jù)庫。
android.graphics :底層圖形庫,包含畫布、點、矩形等,可以將其直接繪制到屏幕上。
android.location :定位和相關(guān)服務(wù)的類。
android.media :提供一些類管理多種音頻、視頻的媒體接口。
android.net :提供幫助網(wǎng)絡(luò)訪問的類,超過通常的 java.net.* 接口。
android.os :提供了系統(tǒng)服務(wù)、消息傳輸和 IPC 機制。
android.opengl :提供 OpenGL 的工具。
android.provider :提供訪問 Android 內(nèi)容提供者的類。
android.telephony :提供與撥打電話相關(guān)的 API 交互。
android.view :提供基礎(chǔ)的用戶界面接口框架。
android.util :涉及工具性的方法,例如時間日期的操作。
android.webkit :默認(rèn)瀏覽器操作接口。
android.widget :包含各種 UI 元素(大部分是可見的)在應(yīng)用程序的布局中使用
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/
|– buildspec.mk.default
|– cleanspec.mk
|– core (各種以mk為結(jié)尾的文件,它門是編譯所需要的Makefile)
|– envsetup.sh
|– libs
|– target (包含board和product兩個目錄,為目標(biāo)所需要文件)
|– tools (編譯過程中主機所需要的工具,一些需要經(jīng)過編譯生成)
其中,core中的Makefile是整個Android編譯所需要的真正的Makefile,它被頂層目錄的Makefile引用。
基本介紹到此,文章參考網(wǎng)絡(luò)中各種文章,如果有侵權(quán)啥行為的,請聯(lián)系刪除。
posted @ 2013-02-20 14:16 小果子 閱讀(541) | 評論 (0)編輯 收藏
僅列出標(biāo)題
共58頁: 1 2 3 4 5 6 7 8 9 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品夜夜夜| 国产欧美亚洲一区| 亚洲区免费影片| 欧美激情亚洲| 欧美日韩国产色综合一二三四| 亚洲精品国产系列| 99热在线精品观看| 国产伦精品一区二区| 久久精品国产视频| 久久久久久9| 亚洲精品一区二区三区四区高清| 亚洲精品国产品国语在线app| 欧美日韩国产大片| 久久se精品一区二区| 久久精选视频| 一区二区三区视频观看| 亚洲欧美日韩中文播放| 亚洲风情在线资源站| 日韩午夜免费| 激情校园亚洲| 一区二区电影免费在线观看| 国产视频精品xxxx| 91久久中文字幕| 国产一二三精品| 亚洲黄色在线| 国产在线播放一区二区三区| 亚洲激情欧美| 国产一区二区三区在线观看免费| 亚洲夫妻自拍| 国产视频在线观看一区二区| 亚洲成色777777女色窝| 国产欧美日本在线| 91久久久久久久久久久久久| 国产亚洲欧美一区二区三区| 91久久精品国产91久久| 国产综合久久| 亚洲一区二区成人在线观看| 亚洲第一网站| 欧美一区二区在线| 亚洲小说欧美另类社区| 麻豆精品在线播放| 久久精品一区二区三区四区| 欧美色精品天天在线观看视频| 久久亚洲午夜电影| 国产精品亚洲аv天堂网| 亚洲激情视频| 最新国产成人av网站网址麻豆| 亚洲欧美视频| 亚洲欧美变态国产另类| 欧美日韩高清区| 亚洲二区三区四区| 一区二区视频在线观看| 欧美一乱一性一交一视频| 亚洲欧美日韩区| 欧美视频精品在线观看| 亚洲人成在线观看网站高清| 亚洲国产精品va在线看黑人 | 亚洲人成毛片在线播放| 黄色影院成人| 久久国产精品一区二区三区| 久久av免费一区| 国产精品三上| 亚洲自拍啪啪| 欧美在线视频不卡| 国产亚洲欧美另类一区二区三区| 亚洲在线播放电影| 欧美在线看片a免费观看| 国产精品一区在线观看你懂的| 亚洲视频国产视频| 欧美一区二区三区久久精品茉莉花| 欧美日韩视频在线一区二区| 日韩亚洲欧美在线观看| 亚洲一区二区高清视频| 国产精品美女久久久久aⅴ国产馆| 9国产精品视频| 性欧美精品高清| 国产真实久久| 麻豆av一区二区三区| 亚洲欧洲一区二区三区在线观看| av不卡在线观看| 国产精品网站在线| 欧美在线观看一区| 欧美激情一区二区三区蜜桃视频 | 亚洲国产精品成人一区二区 | 亚洲欧美日韩久久精品| 久久精品国语| 91久久线看在观草草青青| 欧美精品免费在线| 亚洲一区二区精品视频| 久久精品国语| 亚洲欧洲日韩女同| 欧美亚洲成人网| 欧美在线观看视频一区二区| 欧美激情中文字幕在线| 亚洲一区二区毛片| 韩国av一区二区三区| 欧美精品v国产精品v日韩精品| 中文精品一区二区三区| 久久在线91| 亚洲在线不卡| 亚洲黄色视屏| 国产人妖伪娘一区91| 欧美大片18| 香蕉成人久久| 亚洲精选在线| 欧美成人精品三级在线观看| 中国日韩欧美久久久久久久久| 国产在线精品成人一区二区三区| 欧美高清hd18日本| 欧美一区二区三区四区在线观看地址 | 国产欧美高清| 欧美国产欧美亚洲国产日韩mv天天看完整| 99热免费精品| 亚洲国产精品www| 久久精品免费观看| 中文在线资源观看网站视频免费不卡| 狠狠干综合网| 国产精品一二三四| 欧美人在线观看| 久久婷婷国产综合精品青草| 亚洲一区二区三区免费视频| 亚洲激情网址| 欧美电影免费观看网站| 久久黄色网页| 亚洲欧美制服另类日韩| 一二美女精品欧洲| 亚洲人体1000| 亚洲国产国产亚洲一二三| 国产一区二区三区四区hd| 欧美特黄一区| 欧美三日本三级少妇三99| 欧美xxxx在线观看| 噜噜噜久久亚洲精品国产品小说| 欧美一区二区三区免费观看| 在线视频亚洲欧美| 一本色道久久88亚洲综合88| 亚洲三级观看| 亚洲日本免费| 亚洲精品免费一二三区| 亚洲国产一区在线观看| 欧美黑人在线观看| 欧美bbbxxxxx| 亚洲第一天堂av| 亚洲国产美女| 最新国产精品拍自在线播放| 亚洲国产日韩欧美一区二区三区| 欧美激情自拍| 最新热久久免费视频| 亚洲伦理在线免费看| 亚洲精品国久久99热| 亚洲精品中文字幕女同| 99精品久久久| 亚洲一区二区三区乱码aⅴ| 亚洲永久免费av| 欧美一区二区高清在线观看| 久久av最新网址| 免费成人高清| 欧美日韩国产bt| 国产精品毛片大码女人| 国产三级精品三级| 黄色成人免费观看| 亚洲九九九在线观看| 一本色道久久综合亚洲91| 亚洲一区二区三区精品在线| 亚洲欧美影音先锋| 久久久亚洲高清| 亚洲国产精品电影| 在线亚洲欧美| 久久精品国产久精国产思思| 美日韩精品免费观看视频| 欧美日韩国产综合视频在线观看| 国产精品高潮呻吟久久av黑人| 国产亚洲精品bt天堂精选| 亚洲高清视频在线| 亚洲一区网站| 欧美成人网在线| 一区二区三区高清在线观看| 久久er99精品| 欧美精品日韩精品| 国产一区二区三区的电影| 亚洲精品免费观看| 欧美一区二区三区另类| 亚洲国产黄色片| 午夜精品区一区二区三| 欧美大胆a视频| 国产午夜精品一区二区三区视频| 亚洲精品国产精品乱码不99| 欧美一区在线直播| 亚洲激情电影在线| 久久国产乱子精品免费女| 欧美视频三区在线播放| 激情丁香综合| 欧美一区二区私人影院日本 | 亚洲欧美一区二区在线观看| 欧美大片第1页| 欧美一级成年大片在线观看| 欧美美女喷水视频| 亚洲国产91| 久久亚洲精品伦理| 午夜视频一区|