目录

一、概述

二、在Android 系统源码目录生成签名文件

三、在build.gradle 中配置签名 打包apk

四、小结

五、附录


一、概述

在开发的时候,如果涉及到需要给apk添加android:sharedUserId="android.uid.system" 属性,变为系统级apk,安装时,需要先进行签名再安装。不然会提示安装失败。
通过adb install  安装apk的时候,提示应用未签名提示: INSTALL_PARSE_FAILED_NO_CERTIFICATES 。
提示内容如下:[INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates from /data/app/vmdl979122267.tmp/base.apk: Attempt to get length of null array]
这时候需要对应用进行签名。如何知道应用是否签名成功可以解压apk 查看  META-INF 文件中是否存在 CERT.RSA 文件,如果不存在则说明没签名。需要对其进行签名。

二、生成系统签名文件

在安卓系统源码目录:
 build/target/product/security/
按步骤执行以下操作:
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pemopenssl pkcs12 -export -in  platform.x509.pem -out platform.p12 -inkey  platform.pem -password pass:pwdpwd -name platformkeytool -importkeystore -deststorepass android -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass pwdpwd

执行完以上步骤之后,会生成 platform.jks 文件,如果命名是platform.keystore则 命名为 platform.keystore

三、在build.gradle 中配置签名 打包apk

signingConfigs {platform {//将系统签名文件platform.keystore 放在projectName/app/ 目录下storeFile file('platform.keystore')storePassword 'pwdpwd' // 对应-srcstorepasskeyAlias 'platform' //对应-namekeyPassword 'pwdpwd' // 对应-pass}
}
buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'signingConfig signingConfigs.platform}debug {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'signingConfig signingConfigs.platform}
}
按以上配置完之后通过[Build--Build Bundle(s)--Build APK(s)]步骤打包出来的apk 仍然没有签名成功。
小tips:如果不用[Build--Build Bundle(s)--Build APK(s)] 该步骤打包,直接run 运行编译apk也可以得到最新的apk。但直接run到真机和手动双击安装apk之间存在差异。run 可以安装成功不代表双击安装apk也可以成功。
需要 在build.gradle 中将v1SigningEnabled 设置为true, v2SigningEnabled 设置为false 。
signingConfigs {platform {storeFile file('platform.keystore')storePassword 'android'keyAlias 'androiddebugkey'keyPassword 'android'v1SigningEnabled truev2SigningEnabled false}
}
然后再打包apk。解压apk,会发现apk包中 META-INF 目录多了CERT.RSA 等加密文件。
以上打包的apk,通过adb install 安装可能会提示 Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI] 
此时只需在AndroidManifest.xml 中 配置 android:testOnly="false" 即可
​
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.huawei.hicar"android:sharedUserId="android.uid.system"android:testOnly="false">
​
至此,编译出来的apk,可以adb install 成功,也可以通过手动双击安装成功。注意这里的adb install 没加-r 或者 -t 安装。只是模拟用户双击安装apk的动作。

四、小结

安装apk时,提示INSTALL_PARSE_FAILED_NO_CERTIFICATES ,需要给apk签名才能安装apk成功。本文概要介绍如何通过Android系统源码生成签名文件,然后通过Android Studio 配置build.gradle  打包apk。使得apk可以正常安装。 

五、附录

附录一:build.gradle 文件 [路径:projectName/app/src/build.gralde]
plugins {id 'com.android.application'
}android {compileSdk 28defaultConfig {applicationId "xxxx.xxx.xxx" //对应自身应用包名minSdk 28targetSdk 28versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}signingConfigs {platform {storeFile file('platform.keystore')storePassword 'pwdpwd'keyAlias 'platform'keyPassword 'pwdpwd'v1SigningEnabled truev2SigningEnabled false}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'signingConfig signingConfigs.platform}debug {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'signingConfig signingConfigs.platform}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}
}
dependencies {implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])api 'com.google.zxing:core:3.3.0'}
附录二:Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.huawei.hicar"android:sharedUserId="android.uid.system"android:testOnly="false">.........</manifest>

Android Studio 利用系统签名打包apk相关推荐

  1. Android Studio 使用教程(5)---打包apk

    Android Studio 使用教程(5)---打包apk 本章节讲述使用Android studio 打包apk的过程 1.Build -> Generate Signed APK...,打 ...

  2. android studio关于命令行打包apk

    前言: 最近刚接触studio,由于项目需要打包apk,就尝试用命令行来进行打包.下面做一下总结: 第一:需要在studio项目中配置 signingConfigs { config { keyAli ...

  3. Android Studio创建签名文件,打包apk,多渠道打包

    如果这些内容可以帮到你是我的荣幸 1,点击标题栏上面的Build 2,再点击Generate Signed APK 3,如果已经有签名文件了,就直接用:如果第一次用就创建一个,点击Create new ...

  4. Android Studio(十二):打包多个发布渠道的apk文件

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  5. android studio 把libs包打包到apk中,设置应用以32bit去读取.so文件

    android studio 把libs包打包到apk中: 只需在当前module里的build.gradle添加下列配置: sourceSets {main {jniLibs.srcDirs = [ ...

  6. Android Studio 超级简单的打包生成apk的方法

    本文介绍了Android Studio 超级简单的打包生成apk,分享给大家,也给自己留个笔记. 为什么要打包: apk文件就是一个包,打包就是要生成apk文件,有了apk别人才能安装使用.打包分de ...

  7. Android Studio 引用系统 jar 包的正确姿势

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 Android Studio 如何引用 jar 包,相信大家都会操作的,现在问题来了,对于系统里的 jar,比如 fra ...

  8. Android Gradle实现一键签名打包

    手动打包签名 Build->Generate Singned Bundle or APK->APK Next 选择你的密钥,填入key和两个密码,Next 选择Build Variants ...

  9. Android获取电子签名内容,Android Studio 获取app签名

    今天在学习整合高德地图的时候,需要app的sha1码. image.png Android Studio 获取app签名的步骤如下: 1.Build下的Generate Signed APK imag ...

  10. android 生成带有系统权限的apk

    如果你需要开发一个带有系统权限的app 首先需要配置sharedUserId     如图 如果现在直接运行程序 是安装不上的  需要先把程序打包  然后把需要的文件跟打包好的app放在同一个文件夹下 ...

最新文章

  1. 每瓶汽水一元,两个空瓶可以置换一瓶汽水,现有N元,最多能喝多少瓶?
  2. MBaen+Timer=减少数据库调用
  3. Javascript闭包——懂不懂由你,反正我是懂了
  4. 如何看创建媒体日期_汽车各零部件也有身份证,教你们如何看这些部件的出生日期...
  5. 大数据里的婚姻:婚后两年,出轨高峰……
  6. QML工作笔记-为PushButton戴上皮肤
  7. Java8新特性教程 - 终极指南
  8. 如何将数据渲染到页面上?
  9. Okhttp3 使用和原理(DEMO)
  10. 【限时福利】COACKA免费试听@Days China,干货在这里!
  11. linux如何查看 GPU的信息
  12. 【转】打造个性化ghostxp光盘另类教程(3)
  13. 【洋桃电子】STM32入门100步-02
  14. 浅谈canvas绘画王者荣耀--雷达图
  15. 纪录片《向北1500米》
  16. Java Word中的文本、图片替换功能
  17. LumaQQ.NET使用的一些方法
  18. Erlang词法分析器、语法分析器(lexer-leex,yac-yecc)
  19. [日推荐]『我的时间线』记录你的生活
  20. UVA1103古代象形文字識別

热门文章

  1. 人工智能机器学习算法
  2. Web 项目中,MySQL 最新驱动下载、及配置
  3. 矩阵运算--特征矩阵
  4. Mem Reduct 内存自动清理工具
  5. Linux上的tomcat版本升级
  6. EPS学习笔记3----------常用地物采集方法(房屋,斜坡,台阶)
  7. 不管是蓝牙耳机还是有线耳机长时间佩戴都是有危害的,这些问题不容小觑!
  8. 【krpano】KRPano测试开发专用浏览器
  9. 读《财务就是IT 企业财务信息系统》
  10. 页面导出excel的三种方式