上一节,可以通过添加su的方式获取系统权限,但这种存在安全隐患,故不推荐,本文通过获取数字签名方式获取系统权限。

在我们的AndroidManifest.xml中添加    android:sharedUserId="android.uid.system",添加后应该类似

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xx.xx.xxrapp"
android:sharedUserId="android.uid.system"
>

其次需要准备工作:

准备

工具

SignAPK.jar

此工具由Android源代码附带提供。signapk的源代码是$AndroidRoot/build/tools/signapk下,编译后在$AndroidRoot/out/host/linux-x86/framework下。

BSP厂商提供此工具。

此工具可以运行于Windows和Linux平台。当然需要操作系统中安装了Java运行时环境Java Runtime Environment (JRE)。

注意,不是源码,我们需要预编译的,有的在预编译下面,我的就在$AndroidRoot\prebuilts\sdk\tools\lib

解压缩工具

Zipalign

Android SDK中包含一个“zipalign”的工具,它能够对打包的应用程序进行优化。在你的应用程序上运行zipalign,使得在运行时Android与应用程序间的交互更加有效率。(一般都有不需要安装)

http://developer.android.com/tools/help/zipalign.html

证书

签名apk使其具备system权限,需要使用两个文件platform.pk8和platform.x509.pem。这两个文件也是Android BSP厂商编译Android时候使用的证书文件。

文件由BSP厂商提供。(这个必须从源码里找,只有厂商才有)

文件路径为:$AndroidRoot/build/target/product/security/

这两个文件会被签名工具SignAPK读取使用。

java -jar signapk.jar platform.x509.pem platform.pk8 MyDemo.apk MyDemo_signed.apk 得到具有对应权限的APK

优化APK:
zipalign -v 4 MyDemo_signed.apk MyDemo_new.apk

感谢http://mysuperbaby.iteye.com/blog/1420612博主文章,至于怎么设置time

代码如下

  1. public static void setDate(int year, int month, int day) throws IOException, InterruptedException {
  2.  
  3. Calendar c = Calendar.getInstance();
  4.  
  5. c.set(Calendar.YEAR, year);
  6. c.set(Calendar.MONTH, month);
  7. c.set(Calendar.DAY_OF_MONTH, day);
  8. long when = c.getTimeInMillis();
  9.  
  10. if (when / 1000 < Integer.MAX_VALUE) {
  11. SystemClock.setCurrentTimeMillis(when);
  12. }
  13.  
  14. long now = Calendar.getInstance().getTimeInMillis();
  15. //Log.d(TAG, "set tm="+when + ", now tm="+now);
  16.  
  17. if(now - when > 1000)
  18. throw new IOException("failed to set Date.");
  19. }
  1. public static void setTime(int hour, int minute) throws IOException, InterruptedException {
  2.  
  3. Calendar c = Calendar.getInstance();
  4.  
  5. c.set(Calendar.HOUR_OF_DAY, hour);
  6. c.set(Calendar.MINUTE, minute);
  7. long when = c.getTimeInMillis();
  8.  
  9. if (when / 1000 < Integer.MAX_VALUE) {
  10. SystemClock.setCurrentTimeMillis(when);
  11. }
  12.  
  13. long now = Calendar.getInstance().getTimeInMillis();
  14. //Log.d(TAG, "set tm="+when + ", now tm="+now);
  15.  
  16. if(now - when > 1000)
  17. throw new IOException("failed to set Time.");
  18. }

该代码参考了http://blog.csdn.net/aikongmeng/article/details/26730737博主文章,但有所修改。

谢谢!

apk添加系统签名的更多相关文章

  1. 给第三方apk进行系统签名的几种方式【转】

    本文转载自:http://blog.csdn.net/luzhenrong45/article/details/47733053 版权声明:本文为博主原创文章,未经博主允许不得转载. -------- ...

  2. Android实践 -- 对apk进行系统签名

    对apk进行系统签名 签名工具 网盘下载 ,需要Android系统的签名的文件 platform.x509.pem 和 platform.pk8 这个两个文件在Android源码中的 ./build/ ...

  3. apk增加系统签名的方法

    1.命令行方法给apk加系统签名在Linux环境:java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 ...

  4. 有的系统区apk需要对其系统签名,才能正常使用。

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 向方案公司索要platform.x509.pem 和platform.pk8这两个文件. ...

  5. Android Studio自动生成带系统签名的apk

    介绍签名的两种方式: 1.signapk.jar命令行方式: 如果你需要开发一个带有系统权限的app,往往需要配置SharedUserId,比如: </pre><pre name=& ...

  6. apk系统签名小技巧

    前言 对于经常和android系统打交道的攻城狮来说,给app打系统签名一定是日常操作啦.由于最近使用的比较多,特此总结一下,减少复制粘贴的操作,通过命令行来搞定. 简化前的操作 1.Android ...

  7. Android apk签名详解——AS签名、获取签名信息、系统签名、命令行签名

    Apk签名,每一个Android开发者都不陌生.它就是对我们的apk加了一个校验参数,防止apk被掉包.一开始做Android开发,就接触到了apk签名:后来在微信开放平台.高德地图等平台注册时,需要 ...

  8. 非ROOT实现静默安装的一些思考与体会,AIDL获取IPackageManager,反射ServiceManager,系统签名

    非ROOT实现静默安装的一些思考与体会,AIDL获取IPackageManager,反射ServiceManager,系统签名 最近自家的系统要做一个升级服务,里面有三个功能,第一个是系统升级,也就是 ...

  9. 【keytool jarsigner工具的使用】Android 使用JDK1.7的工具 进行APK文件的签名,以及keystore文件的使用

    一个android apk的编译过程 请参考: http://www.2cto.com/kf/201312/261475.html 典型的编译过程: aapt( Android Asset Packa ...

随机推荐

  1. POJ 3667 Hotel(线段树 区间合并)

    Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...

  2. css3 flex盒子布局

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. A New Beginning

    不知不觉中,接触前端已经快两个月了,从一开始的懵懂无知,到现在的--依旧不是很懂,似乎浪费了很多时间,一直都有记纸质笔记.写总结的习惯,写满一本又换一本,却在不知不觉中忽略了自己的实践能力,花费了太多 ...

  4. Django 之 分表

    app名称为'core',基本的models.py文件内容如下: class Province(models.Model): name = models.CharField(u'省份名称',max_l ...

  5. sqlalchemy

    #!/usr/bin/env python #coding:utf8 from sqlalchemy import create_engine,and_,or_,func,Table from sql ...

  6. MyEclipse10建立Maven Webapp项目并通过git传到GitHub

    先创建Maven Webapp项目 图文详解MyEclipse中新建Maven webapp项目的步骤(很详细) 在web项目的路径中右键(前提是你机器已经装了git)“Git Init Here”, ...

  7. java 静态方法和实例方法的区别(转)

    静态方法和实例方法的区别主要体现在两个方面:   在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这 ...

  8. Norflash控制器的Verilog建模之一

    摘要:今天驱动一款SPANSION公司生产的norflash——S29AL032D70,没有别的参考资料,大致了解一下norflash的内部cmos电路架构以及其用途之后,直接看手册吧. 如何看手册: ...

  9. QTP学习笔记之—VBS

    1.ToString() : Returns a string that represents the current test object. Example The following examp ...

  10. artTemplate 自动化编译之tmod

    一.背景 前端小白的成长历程,一般都会经历html模板的一些问题,jquery template/artTemplate/yayaTemplate等常见的模板使用,这里就不作介绍了. 先谈谈我们为什么 ...