前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >编译apk遇到的问题记录

编译apk遇到的问题记录

作者头像
天天Lotay
发布2023-10-15 18:48:12
2040
发布2023-10-15 18:48:12
举报
文章被收录于专栏:嵌入式音视频

1、要解压.tar.gz文件

代码语言:javascript
复制
tar -zxvf 文件名.tar.gz

其中,文件名.tar.gz是你要解压的.tar.gz文件的名称。解压命令选项的含义如下:

  • -z:表示使用gzip算法进行解压缩。
  • -x:表示解压缩操作。
  • -v:可选项,表示在解压过程中显示详细信息。
  • -f:后面跟着要解压的文件名。

请确保在执行解压命令之前已经安装了tar工具,并且指定的文件名正确。解压后的文件将会被提取到当前目录或指定的输出目录中。

2、apk解压出来有CERT.RSA

当你解压一个APK文件时,其中的CERT.RSA是APK文件的签名证书文件。APK文件经过签名后,可以验证APK的完整性和来源的真实性。

CERT.RSA文件包含了用于验证APK签名的公钥证书和数字签名信息。它通常位于META-INF目录下。

如果你希望查看APK的签名证书信息,你可以执行以下步骤:

  1. 使用zip工具或命令行解压APK文件。
  2. 在解压后的文件中找到META-INF目录。
  3. 在META-INF目录中,你将找到CERT.RSA文件。

请注意,CERT.RSA文件是二进制文件,因此无法直接阅读其内容。如果你想要查看证书信息,可以使用Java Keytool或其他证书工具对CERT.RSA文件进行解析和查看。

3、手动编译APK的流程

备注:android sdk版本不同,安装之后在tools下可能会少dx.bat,apkbuilder.bat文件,通过升级SDK或者单独下载放在对应的目录,也可正常使用; 一、手动编译APK的流程如下:

1.生成资源文件:使用Android SDK提供的aapt.exe生成R.java类文件

2.编译本地库:使用Android SDK提供的aidl.exe把.aidl转成.java文件(如果没有aidl,则跳过这一步)

3.编译java代码:使用JDK提供的javac.exe编译.java类文件生成class文件

4.生成dex文件:使用Android SDK提供的dx.bat命令行脚本生成classes.dex文件

5.打包资源文件:使用Android SDK提供的aapt.exe生成资源包文件(包括res、assets、androidmanifest.xml等)

6.生成apk文件:使用Android SDK提供的apkbuilder.bat生成未签名的apk安装文件

7.对apk文件进行签名:使用jdk的jarsigner.exe对未签名的包进行apk签名

二、详细步骤

1)、准备工作

代码语言:javascript
复制
A、安装好JDK,配置环境变量;
B、将android-sdk-windows\platform-tools和 android-sdk-windows\tools 添加到CLASSPATH 环境变量中;
C、打开CMD命令行界面,将当前目录切换到工程所在目录;
D、准备一个目录,以下例子是以在eclipse中创建的Android test project项目,名称Test;

2)生成资源文件,使用aapt生成R.java类文件,aapt所在路径android-sdk-windows\platform-tools\aapt.exe:

代码语言:javascript
复制
E:\Users\Administrator\workspace\Test>aapt package -f -m -J gen -S res -M AndroidManifest.xml -I E:\android-sdk_r23.0.2-windows\android-sdk-windows\platforms\android-18\android.jar

说明:

  • -f -m -J gen 代表按覆盖的形式在gen目录下生成带包路径的R.java;
  • -f force overwrite of existing files;
  • -m make package directories under location specified by -J
  • -J specify where to output R.java resource constant definitions
  • -J后面跟的是生成目录;-S后面跟的是资源目录;-M后面跟的是AndroidManifest.xml;-I后面跟的是使用的AndroidAPI的jar;

3)javac.exe编译.java类文件生成class文件,javac所在路径C:\Program Files\Java\jdk1.6.0_43\bin\javac.exe

代码语言:javascript
复制
E:\Users\Administrator\workspace\Test>javac -encoding utf-8 -target 1.6 -d bin -bootclasspath E:\android-sdk_r23.0.2-windows\android-sdk-windows\platforms\android-18\android.jar gen\android\support\v7\appcompat\test\*.java src\android\support\v7\appcompat\test\*.java

说明:-target:jdk版本;-d:指定生成的class类文件存放的位置;-bootclasspath:覆盖引导类文件的位置;-encoding:后面跟字符编码,避免出现乱码;

4)使用dx.bat命令行脚本生成classes.dex文件,dx.bat所在路径android-sdk-windows\tools\dx.bat

代码语言:javascript
复制
E:\Users\Administrator\workspace\Test>dx.bat --dex --output=E:\Users\Administrator\workspace\Test\bin\classes.dex E:\Users\Administrator\workspace\Test\bin\classes

说明:–output:生成的dex文件存放路径;最后带上class文件所在目录,不需要加包目录

5)使用aapt.exe生成资源包文件,aapt.exe所在路径android-sdk_r23.0.2-windows\android-sdk-windows\platform-tools\aapt.exe

代码语言:javascript
复制
E:\Users\Administrator\workspace\Test>aapt.exe package -f -M AndroidManifest.xml -S res -A assets -I E:\android-sdk_r23.0.2-windows\android-sdk-windows\platforms\android-18\android.jar -F bin\resourcesLater

说明:-S:资源目录;-M:AndroidManifest.xml文件;-I:导入用的jar文件;-F:后面跟生成的资源文件存放位置,生成的资源文件名是自己新建的

6)使用apkbuilder.bat生成未签名的apk安装文件,apkbuilder.bat所在路径android-sdk_r23.0.2-windows\android-sdk-windows\tools\apkbuilder.bat。 (使用该命令时:会提示该工具已过时,Google不推荐使用。而推荐使用的是:com.android.ant.ApkBuilderTask,但apk仍能成功生成)

代码语言:javascript
复制
E:\Users\Administrator\workspace\Test>apkbuilder E:\Users\Administrator\workspace\Test\bin\HelloWorld.apk -u -z E:\Users\Administrator\workspace\Test\bin\resourcesLater -f E:\Users\Administrator\workspace\Test\bin\classes.dex -rf E:\Users\Administrator\workspace\Test\src

THIS TOOL IS DEPRECATED. See --help for more information. 说明:-z:资源打包文件;-f:类打包文件;-rf:源代码目录;

(备注:此步骤没有成功给apk签名) 7)使用jarsigner.exe对未签名的包进行apk签名,jarsigner.exe所在路径C:\Program Files\Java\jdk1.6.0_43\bin\jarsigner.exe

代码语言:javascript
复制
E:\Users\Administrator\workspace\Test>jarsigner -verbose -keystore E:\Users\zhengshu_apk -signedjar E:\Users\Administrator\workspace\Test\bin\HelloWorld.apk E:\Users\Administrator\workspace\Test\bin\HelloWorld.apk.mydeystore

说明:-keystore:keystore文件;-signedjar:签名后的文件;后面还有未签名文件和key的alias

用法:

代码语言:javascript
复制
 jarsigner [选项] jar 文件别名
 jarsigner -verify [选项] jar 文件
  • [-keystore ] 密钥库位置
  • [-storepass <口令>] 用于密钥库完整性的口令
  • [-storetype <类型>] 密钥库类型
  • [-keypass <口令>] 专用密钥的口令(如果不同)
  • [-sigfile <文件>] .SF/.DSA 文件的名称
  • [-signedjar <文件>] 已签名的 JAR 文件的名称
  • [-digestalg <算法>] 摘要算法的名称
  • [-sigalg <算法>] 签名算法的名称
  • [-verify] 验证已签名的 JAR 文件
  • [-verbose] 签名/验证时输出详细信息
  • [-certs] 输出详细信息和验证时显示证书
  • [-tsa ] 时间戳机构的位置
  • [-tsacert <别名>] 时间戳机构的公共密钥证书
  • [-altsigner <类>] 替代的签名机制的类名
  • [-altsignerpath <路径列表>] 替代的签名机制的位置
  • [-internalsf] 在签名块内包含 .SF 文件
  • [-sectionsonly] 不计算整个清单的散列
  • [-protected] 密钥库已保护验证路径
  • [-providerName <名称>] 提供者名称
  • [-providerClass <类> 加密服务提供者的名称
  • [-providerArg <参数>]] … 主类文件和构造函数参数
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、要解压.tar.gz文件
  • 2、apk解压出来有CERT.RSA
  • 3、手动编译APK的流程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档