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博主文章,但有所修改。

    谢谢!

  • 相关阅读:
    .NET Interop 工具集
    关于正弦波的算法
    Windows Phone 系列 本地数据存储
    Xaml cannot create an instance of “X”
    Windows Phone 系列 使用 MVVM绑定时无法获取当前值
    Windows Phone 系列 应用程序图标无法显示
    Windows Phone 系列 WPConnect无法上网的问题
    Windows Phone 系列 使用 Windows Phone 保存铃声任务
    WP7.5提交应用
    Windows Phone 系列 动态删除ObservableCollection
  • 原文地址:https://www.cnblogs.com/zhougong/p/5223411.html
Copyright © 2011-2022 走看看