Some problems encountered and their answers in work (Android Chapter)
一、关于APK在相关服务器加固后,无法install报错
二、加固后签名被刷,ADB重新签名的方法
三、加固后通过zipalign对被压缩后的so库进行对其
首次加固之后:
adb install时出现Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates from /data/app/vmdl951451933.tmp/base.apk: Attempt to get length of null array]
这个错误提示大致意思是在解析APK文件时出现问题,可能是因为APK文件本身出现了问题或者是安装时发生了一些不可预知的问题。以下是可能导致此问题的一些原因和解决方法:
1. 检查APK文件是否完整:请确保您尝试安装的APK文件是完整的且未被破损。如果下载文件时出现网络中断或其他问题,可能会导致APK文件被破坏。建议您重新下载APK文件并再次尝试安装。如果您自己编译了APK,请检查编译过程是否有错误,例如资源文件缺失等。
2. 检查APK文件是否签名:如果您自己编译了APK,还需要签名您的APK文件。如果未对APK文件进行签名,则无法在设备上进行安装。您可以使用Android Studio 或者命令行工具(例如jarsigner)对APK文件进行签名。请注意,签名只能在APK打包完成后完成,而不能在编译和打包过程中完成。
3. 检查设备是否已经安装了相同的APK:如果您尝试安装的APK与设备上已经安装的版本相同,则可能出现此问题。在此情况下,您需要先卸载设备上的版本,然后再尝试安装您的APK。
4. 检查设备是否有足够的空间:如果设备存储空间不足,无法进行安装。请检查设备存储空间,并尝试释放一些存储空间。
5. 检查设备是否已开启“USB调试”功能:如果您的设备未开启“USB调试”功能,则ADB可能无法正确安装APK文件。请确保您的设备已启用“开发人员选项”并开启USB调试功能。
这些是可能导致“Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]”错误的一些原因和解决方法。
注意:APK在通讯工具发送接收的时候也有可能出现损坏的情况。
检测APK完整性没有问题后,询问加固同事说是加固完毕后需要重新签名
怎么通过ADB命令给apk签名
要通过ADB命令为APK签名,您需要确保已经安装了Java Development Kit(JDK)和Android SDK,并且在系统环境变量中已经配置了相应的路径。然后按照以下步骤操作:
1. 使用keytool创建一个新的签名密钥库(如果您之前没有创建过签名密钥库),例如:
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
其中,my-release-key.jks是您的密钥库文件名,my-alias是您的密钥别名。在执行此命令时,您需要设置一个密码来保护密钥库和密钥别名。
2. 使用jarsigner命令为APK签名,例如:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.jks my-app.apk my-alias
其中,my-app.apk是您要签名的APK文件名。在使用此命令时,您需要提供刚刚生成的密钥库和密钥别名,以及用于保护密钥库和密钥别名的密码。
3. 最后,在使用jarsigner签名APK之后,使用zipalign优化APK文件,例如:
zipalign -v 4 my-app.apk my-app-aligned.apk
其中,my-app-aligned.apk是已优化的APK文件名。注意,此命令必须在上一步签名APK之后执行。
这样就完成了通过ADB命令为APK签名的过程。您可以将签名后的APK文件安装到设备上以进行测试或分发。
已经有签名文件如何给apk签名
要给 APK 签名,您需要先创建一个私钥和一个证书。您可以使用 Java Keytool 工具创建私钥和证书,然后使用 jarsigner 工具将私钥和证书应用于 APK 文件。
下面是一些基本步骤:
1. 创建私钥
使用以下命令创建私钥:
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
该命令将生成一个名为 my-release-key.jks 的 Java 密钥库,其中包含您的私钥和证书。
2. 构建 APK 文件
使用 Android Studio 或 Gradle 构建您的 APK 文件。请注意,您需要使用发布版本构建 APK 文件,而非调试版本。
3. 签名 APK 文件
使用以下命令将私钥和证书应用于 APK 文件:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.jks app-release-unsigned.apk my-alias
该命令将使用您的私钥和证书签名名为 app-release-unsigned.apk 的 APK 文件,并将其重命名为 app-release.apk。
现在,您已经成功为您的 APK 文件创建了签名。
ADB命令签名后的apk应该怎么安装进系统(例子)
要将签名后的 APK 安装到 Android 设备中,您可以使用以下两种方法:
1. 经过认证的应用商店
您可以将 APK 文件上传到经过认证的应用商店(如 Google Play 或 Amazon Appstore),以便用户可以通过应用商店进行安装。这样用户可以方便地从应用商店下载和安装应用程序。
2. ADB 命令行
您可以使用 ADB 命令行工具将签名后的 APK 文件安装到 Android 设备中。以下是安装 APK 文件的基本步骤:
1. 确保您已经安装了 Android SDK,并且设备已连接到计算机。
2. 打开命令行终端,并移动到 adb 工具的目录。例如,如果您的 adb 工具位于 C:\Android\platform-tools 目录中,那么您可以在命令行中输入以下命令:
cd C:\Android\platform-tools
3. 通过以下命令将 APK 文件上传到设备中:
adb push myapp.apk /sdcard/
其中 myapp.apk 是您签名后的 APK 文件的名称。
4. 使用以下命令在设备中安装 APK 文件:
adb install /sdcard/myapp.apk
如果您的 APK 文件中包含了 Native 库,您可能需要在安装 APK 文件之前先使用以下命令给设备授权:
adb shell pm grant <your-package-name> android.permission.FORCE_STOP
要检查您的应用程序包名,请查看您的项目的 build.gradle 文件。
5. 安装完成后,您可以在设备上找到您的应用程序,并开始使用它。
签名后继续安装出现以下错误
ADB命令install apk报错Failure [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2]
该错误提示表明在安装 APK 文件时,Android 系统无法提取 APK 包中的原生库。这可能是由于以下几种情况导致的:
1. 原生库文件缺失或损坏。
在构建项目时,如果某些原生库文件不存在或者损坏了,那么 Android 系统在安装 APK 文件时就会遇到这个问题。您可以检查您的项目并确保所有必须的原生库文件都存在并正确地添加到项目中。
2. 缺少必要的权限。
这可能是因为您在 APK 文件中使用了某些特定的权限或功能,而且没有在清单文件中声明它们。请检查您的清单文件并确保您已经声明了所有必要的权限和功能。
3. 手机空间不足。
如果您的设备空间不足,那么 Android 系统就无法提取 APK 包中的所有文件,包括原生库文件。您可以尝试删除一些不必要的文件或应用程序,并重新安装 APK 文件。
4. 您的 APK 文件已经被破坏了。
如果您的 APK 文件已经损坏了,那么 Android 系统在安装时就无法正确提取所有文件。您可以尝试重新构建和签名 APK 文件。
如果以上方法无法解决问题,请尝试使用以下命令进行安装:
`adb install -r -t app-release.apk`
其中 `-r` 参数是用来替换现有的应用程序, `-t` 参数是用来允许在模拟器或设备上安装应用程序。
随后继续使用adb install -r -t app-release.apk
进行安装同样报Failure [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2]的错误,猜测可能是原生库被压缩并在加固后损坏,于是尝试使用zipalign对被压缩后的so库进行对其
参考博文:
安装APK提示Failure [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2]
Failure [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2]
https://developer.android.google.cn/studio/command-line/zipalign?hl=zh-cn
如果您的 APK 包含共享库(.so 文件),请使用 -p 来确保它们与适合 mmap(2) 的 4KiB 页面边界对齐。对于其他文件(其对齐方式由 zipalign 的必选对齐参数确定),Android Studio 将在 32 位和 64 位系统中对齐到 4 个字节。
如需对齐 infile.apk 并将其保存为 outfile.apk,请运行以下命令:
zipalign -p -f -v 4 infile.apk outfile.apk
如需确认 existing.apk 的对齐情况,请使用以下命令。如果您使用 Android Studio 或 AGP 进行构建,则应使用该命令来验证 APK 是否已对齐。
zipalign -c -v 4 existing.apk
下表列出了可用的 zipalign
选项:
选项 | 说明 |
---|---|
-c | 仅检查对齐情况(不会修改文件)。 |
-f | 覆盖现有输出文件。 |
-h | 显示工具帮助。 |
-p | 使未压缩的 .so 文件对齐页面。 |
-v | 详细输出。 |
-z | 使用 Zopfli 重新压缩。 |
以上操作后APK顺利install机器
ubuntu如何安装zipalign
要在 Ubuntu 上安装 zipalign,您可以使用以下步骤:
1. 打开终端,并使用以下命令安装 Android SDK:
sudo apt-get install android-sdk
2. 现在,使用以下命令安装 Zipalign:
sudo apt-get install zipalign
3. 如果您在 Ubuntu 上安装的是 Android Studio,则可以找到 zipalign 工具的位置。使用以下命令找到 zipalign 工具的路径:
find ~/ -name zipalign
4. 如果您想将 zipalign 添加到您的环境变量中,可以使用以下命令在 .bashrc 文件中添加路径:
echo "export PATH=\$PATH:/path/to/zipalign" >> ~/.bashrc
在上述命令中,请将 /path/to/zipalign 替换为您在第三步中找到的 zipalign 工具的路径。
安装完成后,您现在可以使用 zipalign 工具来优化您的 APK 文件。