当前位置:   article > 正文

Android Studio apk系统签名和版本描述的实现_检查apk签名方式

检查apk签名方式

第一部分:Android Studio apk系统签名

背景描述:

有时候,我们开发的apk需要用到系统权限,需要在AndroidManifest.xml中添加共享系统进程属性:
android:sharedUserId=”android.uid.system”
android:sharedUserId=”android.uid.shared”
android:sharedUserId=”android.media”
这时候apk的签名就需要是系统签名(platform、shared或media)才能正常使用。


常用APK签名方式:

第一种:Android源码环境下签名
1. 按照系统应用的目录排布,将应用上传到源码编译服务器或虚拟机上,一般在vender目录下。或者拷贝App源码到Android源码的packages/apps/目录下,且App源码是普通(Eclipse)格式的。
2. 配置Android.mk,在其中添加
LOCAL_CERTIFICATE := platform 或 shared 或 media
3. 使用 “mmm/mm + 你的应用路径“的命令来编译你的应用;
此时,out/~目录下所生成的 apk 就有系统的权限了。


第二种:手动签名
这种方式比在源码环境下签名简单,App可以在Eclipse或Android Studio下编译,然后手动给apk重新签名即可。
文件位置:
platform.x509.pem、platform.pk8 在 ../builzaid/target/product/security目录下
signapk.jar 在 ../out/host/linux-x86/framework路径下
signapk源码路径 在 ../build/tools/signapk下
签名命令:
java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk
签名步骤:
1、将相关文件及源apk文件置于同一路径下
2、检查源apk包,去掉META-INF/CERT.SF 和 META-INF/CERT.RSA 文件
3、执行签名命令即可


第三种:利用bat脚本签名(只是将第二种签名方式用bat脚本来执行)


第四种:Android Studio一键Run签名实现
1.原理分析简述
就是通过Android studio 直接给 apk 加上开发者签名(jks文件),使用 keytool-importkeypair 对jks文件进行系统签名,在Run的时候,直接使用带有系统签名的 jks 对 apk 进行签名,这样编译生成的 apk 文件就自带系统签名了。

2.所需的文件
keytool-importkeypair工具的下载(这个工具的作用是将系统签名的相关信息导入到已有的签名文件里)。


在工程根目录下创建类似signApk文件夹来专门存放签名相关文件(
platform.x509.pem、platform.pk8、keytool-importkeypair、SigNature.jks、signature.sh)如下图。
这里写图片描述

3.制作步骤
使用Android studio 生成你自己的 jks 文件
这里写图片描述
如果,之前没有的就新建,点击Create New … 设置密码(易记,建议123456),如下图:
这里写图片描述
然后Next –> Finish


编写签名脚本signature.sh,内容如下

#! /bin/bash

#对变量赋值:
a="this file is tested succeesfully  "
# 现在打印变量a的内容:
echo $a

# 转换系统签名命令
#./keytool-importkeypair -k SigNature.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias SigNature
./keytool-importkeypair -k SigNature.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias SigNature
# SignDemo.jks : 签名文件
# 123456 : 签名文件密码
# platform.pk8、platform.x509.pem : 系统签名文件
# SignDemo : 签名文件别名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在cmdx下,定位到signApk文件目录下,执行signature.sh脚本,如下图:
这里写图片描述


配置builde.gradle
为了使自己发布的apk更具保密性,将签名信息放在项目gradle.property下。
这里写图片描述
在modle的builde.gradle下配置
这里写图片描述


如果想直接Run app就是release版且带系统签名的apk,还需修改:
这里写图片描述


buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        signingConfig signingConfigs.release
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这样直接Run app就是带系统签名的release版apk了。


第二部分:apk版本信息控制

android studio apk版本信息不再manifest里面编辑,而是在builde.gradle配置
这里写图片描述

apk输出版本编写

buildTypes {
        debug {
            // 显示Log
            buildConfigField "boolean", "LOG_DEBUG", "true"
            versionNameSuffix "-debug"
            minifyEnabled false
            zipAlignEnabled false
            shrinkResources false
        }

        release {
            // 不显示Log
            buildConfigField "boolean", "LOG_DEBUG", "true"
            // 混淆
            minifyEnabled true
            // Zipalign优化
            zipAlignEnabled true
            // 移除无用的resource文件
            shrinkResources true
            // 前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            signingConfig signingConfigs.release
        }

        //发布后apk的名称
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                def outputFile = output.outputFile
                def fileName
                if (outputFile != null && outputFile.name.endsWith('.apk')) {
                    if (variant.buildType.name.equals('release')) {
                        fileName = "Sky_v${defaultConfig.versionName}-${"_"}-${releaseTime()}.apk"
                    } else if (variant.buildType.name.equals('debug')) {
                        fileName = "Sky_v${defaultConfig.versionName}-${"_"}-${releaseTime()}_debug.apk"
                    }
                    output.outputFile = new File(outputFile.parent, fileName)
                }
            }
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

至此,本章内容介绍完毕。请大家多多指点。

转载请注明:http://blog.csdn.net/veryliu

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/420088
推荐阅读
相关标签
  

闽ICP备14008679号