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运行在真机上。请大神指教。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值