zoukankan      html  css  js  c++  java
  • apk添加系统签名

    上一节,可以通过添加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)。

    注意,不是源码,我们需要预编译的,有的在预编译下面,我的就在$AndroidRootprebuiltssdk oolslib

    解压缩工具

    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

    代码如下

      public static void setDate(int year, int month, int day) throws IOException, InterruptedException {
    
    
    
            Calendar c = Calendar.getInstance();
    
            c.set(Calendar.YEAR, year);
            c.set(Calendar.MONTH, month);
            c.set(Calendar.DAY_OF_MONTH, day);
            long when = c.getTimeInMillis();
    
            if (when / 1000 < Integer.MAX_VALUE) {
                SystemClock.setCurrentTimeMillis(when);
            }
    
            long now = Calendar.getInstance().getTimeInMillis();
            //Log.d(TAG, "set tm="+when + ", now tm="+now);
    
            if(now - when > 1000)
                throw new IOException("failed to set Date.");
        }
    public static void setTime(int hour, int minute) throws IOException, InterruptedException {
    
     
    
    Calendar c = Calendar.getInstance();
    
    c.set(Calendar.HOUR_OF_DAY, hour);
    c.set(Calendar.MINUTE, minute);
    long when = c.getTimeInMillis();
    
    if (when / 1000 < Integer.MAX_VALUE) {
    SystemClock.setCurrentTimeMillis(when);
    }
    
    long now = Calendar.getInstance().getTimeInMillis();
    //Log.d(TAG, "set tm="+when + ", now tm="+now);
    
    if(now - when > 1000)
    throw new IOException("failed to set Time.");
    }

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

    谢谢!

  • 相关阅读:
    Identity Server4 基础应用(一)Client Credentials
    AX2012 form displays unusually because of native resolution issues(由于本机高分辨率问题导致AX2012界面显示异常)
    AX视图View中添加静态方法
    AX2012导Demo数据
    AX多线程编译
    C# ListView用法详解 很完整
    用 C# 如何判断数据库中是否存在一个值
    ASCII码对照表
    C#中Chart的简单使用(柱状图和折线图)
    使用Filezilla Server配置FTP服务器
  • 原文地址:https://www.cnblogs.com/zhougong/p/5223411.html
Copyright © 2011-2022 走看看