Android实战技巧之五十:App的系统签名

原创 2016年03月15日 18:18:11

这件事困扰我们多时了。
我们一直想用非源码编译的方式解决此事,按如下步骤。

这种获取系统签名的方法如下:
1、apk中需要使用android:sharedUserId=”android.uid.system” 这个属性。在Manifest文件修改,如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.linc.systemsigndemo"
    android:sharedUserId="android.uid.system"
    >
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

2、将app做无签名编译(Android Studio)
用命令行编译

Windows: gradlew.bat assembleRelease 
Mac/linux: ./gradlew assembleRelease

3、对apk进行系统签名。
1)、在android源码下build/target/product/security找到两个密钥文件platform.x509.pem platform.pk8
2)、out/host/linux-x86/framework/signapk.jar找到系统封装工具signapk.jar
3)、使用命令java -jar signapk.jar platform.x509.pem platform.pk8 test.apk testnew.apk

安装时遇到的问题:

Installation failed with message INSTALL_FAILED_SHARED_USER_INCOMPATIBLE.

困扰了大概半个月,最后觉得还是源码编译吧。
1、将Android Studio项目复制到源码packages/apps/路径下
2、从其他项目如Settings复制Android.mk,做一些修改如下:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_JAVA_LIBRARIES := bouncycastle conscrypt telephony-common
LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4 android-support-v13 jsr305

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := \
        $(call all-java-files-under, app/src/main/java/) \

LOCAL_PACKAGE_NAME := SystemSignDemo
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true

LOCAL_PROGUARD_FLAG_FILES := proguard.flags

LOCAL_AAPT_FLAGS += -c zz_ZZ

include $(BUILD_PACKAGE)

# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))

3、将res文件夹和Manifest文件拷到与Android.mk同级目录(项目的根目录)
4、编译

mm -B

5、成功后会生成两个文件: .odex和.apk文件
前者是优化过的可执行程序。此时可以把apk文件当成普通的应用安装即可。

6、如何证明已经获得系统签名
很简单,使用SystemClock.setCurrentTimeMillis修改系统时间,将其修改为12:15,如下:

 mTvInfo.setText("time: "+SystemClock.currentThreadTimeMillis());

        Calendar c = Calendar.getInstance();

        c.set(Calendar.HOUR_OF_DAY, 12);
        c.set(Calendar.MINUTE, 15);
        long when = c.getTimeInMillis();

        if (when / 1000 < Integer.MAX_VALUE) {
            Log.d(TAG,"set time");
            mTvInfo.append("\nset time when: "+when);
            SystemClock.setCurrentTimeMillis(when);
        }

Good Luck!

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android给app签上系统级签名

简介我们在做系统级的app开发时,肯定会遇到的问题就是给app签名了,像这种系统级的app开发,android系统是没有直接给出keystore的签名文件的,那么我们要怎么给自己的app签上系统级签名...
  • QQxiaoqiang1573
  • QQxiaoqiang1573
  • 2016年08月19日 17:18
  • 5058

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

如果你需要开发一个带有系统权限的app,往往需要配置SharedUserId,比如: ...
  • cxq234843654
  • cxq234843654
  • 2016年06月01日 17:32
  • 20546

Android签名机制之---签名过程详解

一、前言又是过了好长时间,没写文章的双手都有点难受了。今天是圣诞节,还是得上班。因为前几天有一个之前的同事,在申请微信SDK的时候,遇到签名的问题,问了我一下,结果把我难倒了。。我说Android中的...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2015年12月25日 15:46
  • 46632

Android中应用程序如何获得系统签名权限

有些库的使用条件比较苛刻,要求同一签名的程序才可以获得访问权。此时即便是在AndroidManifest.xml中添加了相应的permission,依旧会得到没有xx访问权限的问题。比如android...
  • jingwen3699
  • jingwen3699
  • 2012年09月27日 14:38
  • 23551

android中怎样将自己的应用程序的签名改为系统签名一样

1.使用已经存在的签名到处android应用程序的apk 2.使用压缩软件打开apk,进入META-INF目录下,删除应用程序的3个签名文件 3.到android系统目录build/target/...
  • lg878398509
  • lg878398509
  • 2013年12月11日 21:41
  • 18667

Android签名与认证原理

一、Android签名概述 我们已经知道的是:Android对每一个Apk文件都会进行签名,在Apk文件安装时,系统会对其签名信息进行比对,判断程序的完整性,从而决定该Apk文件是否可以安装,在...
  • justFWD
  • justFWD
  • 2015年12月22日 11:17
  • 2951

Android应用程序如何进行系统签名

有时写一个程序需要调用系统的库,如果权限不够,是用不了库里面一些方法的 。这时就需要将apk进行系统签名了。         简单常用的方法:                 1,在apk的Andro...
  • lilidejing
  • lilidejing
  • 2015年04月17日 17:06
  • 4028

android系统签名的不足

android编程时,有时候我们可能需要时到到比如重启、关机等特殊的权限!此时需要用到app系统签名,app才可以运行!比如: uses-permission android:name="and...
  • dengziliang001
  • dengziliang001
  • 2016年09月05日 21:02
  • 621

android 系统签名

Android——编译release版签名系统 AndroidManifest.xml中的android:sharedUserId="android.uid.system",代表的意思是和系统相同...
  • csh86277516
  • csh86277516
  • 2017年06月21日 16:28
  • 718

如何实现在 Android Studio 上开发系统应用(自带系统签名)

如何实现在 Android Studio 上开发系统应用(自带系统签名)                 基于Android 系统应用包名和路径的局限性,很多同僚不得不暂时放弃 Android ...
  • MLQ8087
  • MLQ8087
  • 2016年12月06日 11:02
  • 4626
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android实战技巧之五十:App的系统签名
举报原因:
原因补充:

(最多只允许输入30个字)