android源碼編譯 And 運行具有權限的app

       

               本人學android有半年的經歷了,也開始自己,或者和朋友一起開發一定的項目。最近看到QQ的輔助功能有一個強大的功能就是截圖”——root之後就可以實現爲第三方軟件截圖。甚是強大。就開始着手自己寫一個類似的截圖軟件。也想着做一點更底層的開發,而這些就要求會寫就有root權限的app程序。所以就查了很多資料,大概瞭解到需要完成的步驟

    


  1. 源碼下載
  2. 源碼編譯
  3. 程序編寫
  4. Apk安裝

        這些基本的步驟完成了,就基本瞭解在源碼編譯自己的工程,產生的apk就具有可以獲取root最高權限。


      1:源碼下載和編譯

        其實官網有教程,大家如有了解的,可以翻牆進官網閱讀一下,閱讀官網資料是最正確的獲取方法的辦法。但對英文水平有一定的要求。                

     

        翻牆的話用github的hosts開源項目就可以了。

        github hosts

       使用方法:類似windows下的,修改hosts配置文件就可以了。     


                 1:如果你windows下的就是修改hosts文件就行翻牆的話,直接copy裏面的內容。             

                 2vim /etc/hosts,然後複製進去。保存一下。             

                  3:重啓一下,google就可以進去了             


        這樣的翻牆方法存在一定的問題,不是很徹底的翻牆。因爲如果你google一下和有關係的敏感話題,是記不去相關的網站的,而且最大的詬病是youtube上不去,視屏看不了。但是其他國外的重要的網站,在網速給力的情況下,都是可以翻牆成功的。(有那個大神瞭解的,請告知,謝謝。          

        但是,問題來了,即使翻牆,用官網的方法,源碼也下載不下來。           

                所以,樓主無語了。配置VPN服務器的方法,有誰成功的,請告知,謝謝。           那麼樓主的源碼是來自哪裏呢?對, 國內。           畢竟國內有好人啊,

         源碼下載                 

        這個博客提供了2.354.4源碼的百度網盤下載,已經夠用了。所以,樓主就在windows平臺下載玩之後,按照他的方法進行組合。至此,源碼下載成功。樓主已經測驗的是4.4的,成功編譯。          



               2.編譯方法


      編譯源碼之前有很多要環境的配置,這個參考官網,成功率大寫。但是國內的很多博客提供了出現的所有錯誤。所以不要怕出現編譯錯誤,有錯誤就解決。                

         教程鏈接          

        具體情況,要看自己的系統版本,編譯源碼要求的jdk的版本爲1.51.6.這個可以去sun官網下載並配置。根據上面的鏈接,然後在編譯源碼之前配置好環境,就可以進行編譯了進入自己的android源碼根目錄:鍵入make指令。進行編譯.編譯的時間大概有幾個小時,樓主的編譯了大概5個小時左右。只要沒有報error  。最後說明源碼編譯就成功了。

     

       源碼編譯中會出現很多的問題,樓主是有問題就google,基本上按照他們的方法都解決了。                 最後如果實在沒有解決,就重新編譯一下。                  

             

   #make clean                 
   #make      

      可以去官網下載adt-bundle-for linux 的最新的安卓開發SDE,就可以,進行開發android平臺了。其實和windows下差不多。樓主給個曉得提示就是,如果你下載的開發工具的adt版本小於30.0.0,就不要更新sdk,否則會出現adt版本不相互容。接下來會出現很多棘手的問題。所以樓主建議大家去官網下載最新版本的adt-bundle - linux       

            

              3.apk的編譯和安裝           


       編譯成功後源碼根目錄             

 abi       build       development  frameworks       Makefile  pdk        system          art       cts        

             device       hardware         ndk       prebuilts  tools          bionic    dalvik      docs         libcore         

             out       repo          bootable  developers  external     libnativehelper  packages  sdk

 下面說一下後面主要用到的重要的文件目錄    

     

             1.主要的指令目錄,例如emulator,我們的啓動模擬器命令   out/host/linux-x86/bin           

             2.系統鏡像文件目錄:   out/target/product/generic            

             在out/target/product/generic下生成的三個鏡像文    件:ramdisk.img,system.img,userdata.img以及它們對應的目錄root,system,data。 ramdisk.img是根文件系統,system.img包括了主要的包、庫等文件,userdata.img包括了一些用戶數據,android加載 這3個映像文件後,會把 system和 userdata分別加載到 ramdisk文件系統中的system和 data目錄下。            詳細解釋:http://www.embedu.org/Column/Column629.html  

      

             3.apk文件目錄,自己編譯產生的apk文件也在這個目錄下。  /out//target/product/generic/system/app         

              4.祕鑰文件,爲apk簽名。build/target/product/security目錄下的platform.pk8platform.x509.pem        

              5.Android提供的Signapk工具來簽名    signapk的目錄build/tools/signapk        

   


下面說一下完整的編譯自己apk的步驟     

  

              (1):將自己的工程,例如hello-world複製到apk文件目錄下(見上)。        

              (2):修改 AndroidManifest.xml(非必須,除非app需要system ID)

                               添加: android:sharedUserId="android.uid.system" ---與系統一樣 userID 

                                 如下:

                                 <manifest xmlns:Android="http://schemas.android.com/apk/res/android"   

                                                     package="com.wpstar.Wifi_Test1"    

                                                    android:versionCode="1"    

                                                      android:sharedUserId="android.uid.system"  //這一句添加

                                                    android:versionName="1.0">    

                                                    <uses-sdk Android:minSdkVersion="8" />

                  

            (3)在其中添加Android.mk文件,內容如下

    

    LOCAL_PATH:= $(call my-dir)  
    include $(CLEAR_VARS)  
    LOCAL_MODULE_TAGS := optional  
    LOCAL_SRC_FILES := $(call all-java-files-under, src)  
    LOCAL_SDK_VERSION := current  
    LOCAL_PACKAGE_NAME := hello  //自己的包的名字
    LOCAL_CERTIFICATE := platform  
    include $(BUILD_PACKAGE)  
    include $(call all-makefiles-under,$(LOCAL_PATH))  
          解釋如下:

                      LOCAL_MODULE_TAGS =

                      user:指該模塊只在user版本下編譯

                      eng :指該模塊只在eng版本下編譯

                      tests:指該模塊只在tests版本下編譯

                      optional:指該模塊在所有版本下都可以編譯


注意:對於4.0ics 以上編譯 apk 需要加入 WITH_DEXPREOPT := false 或者 LOCAL_DEX_PREOPT := false 才能編譯生成APK文件,默認生成的不可獨立安裝運行。


      

          (4)因爲編譯某個模塊要用到mm/mmm命令,所以鍵入

                . build/envsetup.sh

               就可以cd到自己工程hello wolrd下,鍵入

               mm

               進行編譯


               本人在編譯的過程中遇到主題Theme,parent=“android.Theme”找不到的等類似的錯誤。

                是sdk版本的問題,我用的源碼是4.4的源碼,所以,就把eclipse 新建工程時的target sdk和max sdk都設置爲4.4的。之後,再把新的工程重新按照以上步驟設置完畢,就可以完美編譯。

               如何查看自己的安卓源碼的版本:

                vim  /build/core/version_defaults.mk 查看 PLATFORM_VERSION:***。

          

           (5) 安裝apk。很簡單,因爲自己編譯的apk已經在apk文件目錄下產生了


                   cd /out//target/product/generic/system/app就可以看到很多系統自帶的app和你自己編譯出來的hello.apk

                 要運行自己的apk,需要啓動emulator.爲了方便,我們可以將指令目錄寫進用戶的環境變量中。

                 例如:

                 將

                    out/host/linux-x86/bin和out/target/product/generic寫進到bashrc中,然後source bashrc就可以直接運行系統編譯出來的emulator。

                  如果直接啓動,按如下方式解決。

                  #source build/envsetup.sh

                  #lunch sdk-eng

                  之後應該就可以直接啓動emulator.

                  然後

                  #adb devices   --查看設備

                  #adb install ...apk。安裝成功。

                

       完畢,源碼下載,編譯,編譯自己的apk,成功在虛擬上運行。這樣自己的apk就具有了系統root權利。

       本人寫博客不多,如有錯誤,請指出。

       還有就是如何讓自己的源碼編譯出來的具有root權限的apk運行在真機上。請大神指教。


 

發佈了26 篇原創文章 · 獲贊 80 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章