android生成签名apk
⑴ Android apk之v1、v2、v3签名
Android APK签名机制是确保应用安全、完整性和防破解的重要手段。这一机制通过应用签名实现对开发者身份的认证,并验证应用的完整性,以防止外部恶意修改。
Android平台支持三种签名方案,分别是v1、v2和v3,需按顺序采用,低版本平台会忽略高版本签名方案中添加的额外数据。v1签名方案基于Jar,流程涉及计算文件摘要、生成摘要文件和签名文件,以及添加开发者证书。v1方案存在覆盖范围不足、验证性能差和存在安全漏洞等问题。
v2方案在Android 7.0中引入,采用全文件签名,能发现所有更改,并提供更快速、全面的验证。v2签名机制在源文件数据存储区和中心目录区插入签名分块,由签名者数据、签名和公钥三部分组成。验证流程包括解密、计算哈希值、比对值等步骤,确保应用未被修改。
v3方案在Android 9.0中加入,基于v2,新增了可以添加新证书的attr块,支持密钥轮换,使得应用在更新过程中可以更改签名密钥,增加了灵活性。v3签名块包含SignerData、Signature和PublicKey部分,与v2相比,v3在SignerData中添加了attr块存储所有签名信息。验证流程与v2相似,但支持更复杂的证书结构。
v2和v3签名方案提供了比v1更强大和全面的保护,但需要遵循特定的验证流程。无论使用哪种签名方案,Android系统都会在安装应用时验证签名信息,确保应用的安全性和完整性。
APK签名机制带来的好处包括提高应用安全性、防止破解和反编译、确保应用完整性和兼容性,以及在更新过程中保护应用不被恶意修改。通过深入学习和理解这些签名方案,Android开发人员能够更好地保护应用免受攻击,并提升应用的安全性能。
⑵ 如何用android:sharedUserId属性生成带有系统权限的apk
要通过android:sharedUserId属性生成带有系统权限的APK,主要需遵循以下步骤:
使用Android系统源码环境下的make命令编译:
- 在Android源码根目录下执行build/envsetup.sh以设置编译环境。
- 使用lunch命令选择编译目标。
- 执行make命令编译整个系统或根据需要选择编译单个模块、指定目录下的模块等。
在AndroidManifest.xml中加入android:sharedUserId="android.uid.system"属性:
- 这一步确保你的APK程序运行在系统进程中,拥有系统权限。
使用特定的签名文件签名APK:
- 若使用Eclipse源码编译,需先编译signapk.java以获取SignApk$SignatureOutputStream.class和SignApk.class。
- 将这两个class文件放入指定目录并生成signapk.jar文件。
- 复制platform.pk8和platform.x509.pem文件至signapk.jar和SignApk.mf所在的目录。
- 使用java jar signapk.jar命令签名APK文件。这两个签名文件是系统签名文件,确保APK能在系统中安装和运行。
将APK放置在开发版的/system/privapp/目录下:
- 这一步是实现APK拥有系统权限的关键,因为放置在/system/privapp/目录下的APK默认拥有系统级权限。
注意事项: 使用android:sharedUserId属性生成的APK仅能在原始Android系统或自己编译的系统中运行。 确保APK签名正确,否则可能导致APK无法安装或运行。 将APK放置在/system/privapp/目录下通常需要在设备已root或处于开发模式的情况下进行。
⑶ Android apk 系统签名
因工作需要对系统的wifi和以太网进行配置,需要获取到系统权限以后才能进行操作,因此研究了下对apk 进行系统签名以获取系统权限,其实本来打算如果root可以的话直接通过root的方式(设备已经root),后来找了半天发现没有api进行修改,无奈只能进行系统签名了,有童鞋知道root方式修改不妨告诉我一下。
这些文件可以问系统厂商获取,如果是原生系统可以到系统源码目录下获取。
如果报以下的错误 ,这时候就用到准备的libconscrypt_openjdk_jni.so 文件
为了检测我们的应用是否已经签名成功 可以获取系统权限,看看能否获取到。
结果:
在上一种方式中,我们成功对我们的apk进行了系统签名,并且能使用系统权限,但是必须每次打包出apk再进行签名 对调试很不方便,下面我们可以生成带有系统签名的签名文件,在项目中使用,就不需要每次手动进行签名。
bubble可以替换为自己喜欢的名称,这一步要输入密码,我尝试输入其他不行,只能输入android。
bubble 可替换为自己喜欢的password和alias
到这里 两种对app进行系统签名的方式完成,如有不足,欢迎指出.
⑷ 如何对android的apk签名进行验证
在Android开发中,确保应用的安全性和完整性至关重要。其中一个重要步骤是对APK文件进行签名。签名不仅可以验证应用的真实身份,还能确保应用在安装过程中没有被篡改。下面是一个详细的签名流程,适用于希望深入了解签名过程的开发者。
首先,我们需要进入命令行模式。可以通过菜单键调用命令提示符(cmd)。然后,我们需要指定JDK安装目录下的Bin子目录。如果JDK安装在E盘,我们可以直接进入E盘,再进入JDK的安装目录。接下来,通过执行keytool.exe工具,创建一个keystore文件。执行命令如下:
keytool -genkeypair -alias mydemo -keyalg RSA -validity 100 -keystore mydemo.keystore
这条命令包括几个参数:-genkeypair指定生成密钥对,-alias用于指定别名,-keyalg用于指定密钥算法,-validity设置证书的有效期,-keystore指定了证书存储的路径。
执行命令后,系统会要求输入证书的详细信息,包括密码、姓名、组织等。完成后,keystore文件即创建完成,可以保存在指定目录。
接下来,我们需要对未签名的APK文件进行签名。使用JDK安装目录下的jarsigner.exe工具,执行如下命令:
jarsigner -verbose -keystore mydemo.keystore -signedjar Notes.apk Notes.apk mydemo.keystore
这条命令中,-verbose参数用于生成详细的输出,-keystore参数指定了存储证书的路径,-signedjar参数用于指定签名后的APK文件、未签名的APK文件和证书别名。
完成签名后,我们还需要对APK进行优化。在SDK目录下的tool目录下,找到zipalign.exe工具。执行如下命令:
zipalign -f -v 4 Notes.apk Notes.apk
这个命令中,-f参数表示强制覆盖已有文件,-v参数表示生成详细的输出,4表示基于4字节对齐。执行后,会生成一个新的优化过的APK文件,这个文件可以对外发布。
整个过程完成后,我们就可以得到一个签名并优化过的APK文件,确保其安全性和完整性。
⑸ Android studio怎么生成签名apk
1、生成你自己的jks文件
将下载好的keytool-importkeypair配置一下,其实主要就是配置一下环境变量,不熟悉的可以阅读官方文档,然后使用下面这条命令(需要在linux下,用windows的可以去在linux下生成jks,然后复制出新的jks回原目录也可以)对jks文件引入系统签名
./keytool-importkeypair -k [jks文件名] -p [jks的密码] -pk8 platform.pk8 -cert platform.x509.pem -alias [jks的别名]
例如我的对应的就是:./keytool-importkeypair -k SignDemo.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias SignDemo
运行完这条命令之后,我们就得到了有系统签名的jks
3、配置gradle(app)
在在android区域下(与defaultConfig同级)添加signingConfigs配置:
依次填写jks的路径,密码,别名等
详情介绍
⑹ android开发 怎么给apk文件用已有的签名文件进行签名,不用eclipse
给apk文件签名主要分三步:
1、创建证书
2、签名
3、优化(可选)
1)使用jdk的keytool工具生成签名用的证书> keytool -genkey -v -alias CERT -keyalg RSA -keysize 2048 -validity 10000 -keystoreCERT.keystore 创建过程需要输入一些标识信息和密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改): CERT.keystore ---- 证书保存的文件名 CERT ---- 证书的别名 10000 ---- 10000天的有效期 2048 ---- 默认为1024 bits,Android 建议使用2048 bits或更高其他的详细信息可以使用keytool -help查看帮助 证书生成后使用如下命令可以查看证书的信息:> keytool -list -alias CERT -keystore CERT.keystore
2)使用jdk的jarsigner工具对apk文件签名> jarsigner -verbose -keystore CERT.keystore to_sign.apk CERT 签名过程需要输入证书的密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改): CERT.keystore ---- 证书保存的文件名 CERT ---- 证书的别名 待签名的apk文件根根目录下如果有文件夹“META-INFO”,请先删除(重新签名就需要这样做)。如果不想创建过程输出太多信息,可以删除“-verbose” 。上述签名会直接覆盖原来的文件,如果不想被覆盖而签名为另外的新文件 signed.akp,只需将 to_sign.apk 改为 -signedjar to_sign.apk signed.akp 即可。签名后可以使用如下命令验证是否签名成功: > jarsigner -verify to_sign.apk 如果需要查看更详细的验证信息,可修改为:> jarsigner -certs -verbose -verify to_sign.apk
3)使用android sdk的zipalign工具优化已签名的apk文件> zipalign -v 4 unaligned.apk aligned.apk 注意要在签名后再zipalign。这个工具不是jdk自带的,而是在%ANDROID_HOME%\tools\zipalign.exe。