Android源码浅析(五)——关于定制系统,如何给你的Android应用系统签名


今天来点简单的我相信很多定制系统的同学都会有一些特定功能的需求,比如

  • 修改系统时间
  • 静默安装
  • 执行某shell命令

这些对于正常的应用来说,是需要很多技巧性的东西来做的,因为他们没有权限,而我们做定制系统的

话,可以给我们的应用来系统签名,这样就拥有系统的权限了,那我们应该怎么做呢?

我们以执行某shell命令为课题来解释:

首先,我们要知道,一般的命令都是在system/bin下,我们可以看图

使用shell命令,比如ls之类的,我们可以直接执行

try {
            Runtime runtime = Runtime.getRuntime();
            runtime.exec("ls");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

你会发现可以执行的,而且可以拿到返回值,通过返回一个Process,然后就可以拿到流了,这里不说,我们继续来看这个ls命令,如果你细心的话,你会发现,ls命令后面有一个字号:toolbox

关于toolbox,他是一个指令集,但是我们今天不讲他,但是你要知道他是一个全局集,有点类似配置了JAVA的环境变量,所有才会用户可以执行

但是我现在执行一个tinymix的指令

    try {
            Runtime runtime = Runtime.getRuntime();
            Process exec = runtime.exec("tinymix -D 1");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

他肯定会报操作不允许,也就是我们没有这个权限,拿我们应该怎么去拿到这个权限呢?就是通过我们的系统签名

1.设置sharedUserId

为了拿到权限,我们需要在清单文件的manifest里设置和系统同一个UserId

android:sharedUserId=”android.uid.system”

2.获取签名文件

签名文件有三个

  • platform.pk8
  • platform.x509.pem
  • signapk.jar

这三个都是可以在源码里拿到的

platform.pk8和platform.x509.pem都可以在build/target/product/security/目录下找到

signapk.jar在build/tools/signapk/目录下

3.系统签名

//执行命令
signapk.jar platform.x509.pem platform.pk8 input.apk output.apk

我们拿到之后把这几个放在同一个目录下,然后打开cmd,执行命令

这句命令后面两个apk分别是你要签名的apk名字和签名后的apk名字,比如我需要签名的apk叫做app_debug

执行命令后会的到

ok,我们现在拿到Test.apk可不能安装,需要push到system/app下,执行命令

adb push  apk路径  /system/app

但是很多人应该会报 Read-only file system错误的

那是因为你没有在remount模式下,你可以执行

adb root
adb remount

就像这样

好的,至此,我们成功的系统签名了,接下来你就可以执行这个shell命令了

这里只是抛砖引玉下,各位自己发挥

有兴趣的可以加群:555974449

Android源码浅析(五)——关于定制系统,如何给你的Android应用系统签名的更多相关文章

  1. Android源码浅析(六)——SecureCRT远程连接Linux,配置端点和字节码

    Android源码浅析(六)--SecureCRT远程连接Linux,配置端点和字节码 需要编译源码的同学,一般都是win+虚拟机吧,但是再虚拟机里体验并不是很好,所有市面上有很多的软件能够做到在wi ...

  2. Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令

    Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Andr ...

  3. Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机

    Android源码浅析(三)--Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机 最近比较忙,而且又要维护自己的博客,视频和公众号,也就没 ...

  4. Android源码浅析(二)——Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境

    Android源码浅析(二)--Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境 接着上篇,上片主要是介绍了一些安装工具的小知识点Andr ...

  5. Android源码浅析(一)——VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置

    Android源码浅析(一)--VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置 最近地方工作,就是接触源码的东西了,所以好东西还是要分享,系列开了这 ...

  6. Android源码笔记——Camera系统架构

    Camera的架构与Android系统的整体架构保持一致,如下图所示,本文主要从以下四个方面对其进行说明. Framework:Camera.java Android Runtime:android_ ...

  7. 【Android 系统开发】使用 Source InSight 阅读 Android 源码

    1. 安装 Source Insight (1) Source Insight 相关资源 安装相关资源 : -- 下载地址 : http://www.sourceinsight.com/down35. ...

  8. Android源码之Gallery专题研究(1)

    前言 时光飞逝,从事Android系统开发已经两年了,总想写点什么来安慰自己.思考了很久总是无法下笔,觉得没什么好写的.现在终于决定写一些符合大多数人需求的东西,想必使用过Android手机的人们一定 ...

  9. 编译android源码m、mm、mmm命令的使用

    http://blog.163.com/zz_forward/blog/static/212898222201442873435471/ gcc怎么查看它的默认include路径和库的路径呢? //- ...

随机推荐

  1. Java内存回收机制.md

    1.java的内存 java的内存结构分为 堆 (是gc的主要区域) 线程共享,主要是用于分配实例对象和数组 栈 线程私有,它的生命周期和线程相同,又分成 虚拟机栈和本地方法栈,只有它会报 Stack ...

  2. 初始Spring MVC——练手小项目

    初始Spring MVC 前几天开始了我的spring学习之旅,由于之前使用过MVC模式来做项目,所以我先下手的是 Spring MVC,做个练手项目,非常简单 项目介绍: 用户输入信息 -> ...

  3. javascript/TypeScript 生成GUID

    export const guid = () => { return `xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g, functi ...

  4. JS实现手机访问pc网址自动跳转到wap网站

    之前写pc端直接跳转wap端一直是后端java写的,跟js一样都是根据navigator.userAgent来判断设备是电脑还是手机的,我知道这种前端也可已完成的功能,只是后台比较强势,本人本着以和为 ...

  5. 多线程利器---队列(queue)

    列表是不安全的数据结构 import threading,time li=[1,2,3,4,5] def pri(): while li: a=li[-1] print(a) time.sleep(1 ...

  6. IOS开发---视频录制

    今天研究了一下使用app录制视频的功能,感觉还是挺简单的.使用了AVFoundation框架,代码比较死,按步骤调用就行. 分享一下今天做的Demo的步骤 一,初始化输入设备,这里涉及到前,后摄像头: ...

  7. JS基本数据类型(typeof的返回结果)

    number(Infinity/NaN) string boolean function object(null.各种值装箱对象.内置对象.自定义对象) undefined 判断对象是否为某个[类/构 ...

  8. bzoj2237[NCPC2009]Flight Planning 结论题?

    2237: [NCPC2009]Flight Planning Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 55  Solved: 27[Submi ...

  9. 实现PC视频播放最强画质教程( Potplayer播放器+MADVR插件)【转】

    转自:http://www.hangge.com/blog/cache/detail_1461.html 一.MADVR介绍 MADVR 是一款超强的视频插件,其配合高清播放软件,可以做到目前 PC  ...

  10. django 发送手机验证码

    一.流程分析: 1.用户在项目前端,输入手机号,然后点击[获取验证码],将手机号发到post到后台. 2.后台验证手机号是否合法,是否已被占用,如果通过验证,则生成验证码,并通过运行脚本,让短信运营商 ...