apktool工具在centos环境中-解包 修改 打包 签名
为了在服务端实现 程序控制分包 而配置起来到 环境第一步:查看Linux自带的JDK是否已安装打开命令终端输入命令:java -version若已经安装了jdk会显示类似下面的信息java version "1.6.0"OpenJDK Runtime Environment (build 1.6.0-b09)OpenJDK 64-Bit Server VM (build 1
为了在服务端实现 程序控制分包 而配置起来到 环境
第一步:查看Linux自带的JDK是否已安装
打开命令终端输入命令:java -version
若已经安装了jdk会显示类似下面的信息
java version "1.6.0"
OpenJDK Runtime Environment (build 1.6.0-b09)
OpenJDK 64-Bit Server VM (build 1.6.0-b09, mixed mode)
最好还是先卸载掉openjdk,在安装sun公司的jdk.
先查看 rpm -qa | grep java
显示如下信息:
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
卸载:
rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
还有一些其他的命令
rpm -qa | grep gcj
rpm -qa | grep jdk
如果出现找不到openjdk source的话,那么还可以这样卸载
yum -y remove java java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
yum -y remove java java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
<1># rpm -qa|grep jdk ← 查看jdk的信息或直接执行
# rpm -q jdk
或
# java -version
<2># rpm -qa | grep gcj ← 确认gcj的版本号
<3># yum -y remove java-1.4.2-gcj-compat ← 卸载gcj
第二步:安装JDK
从SUN的官网上下载 jdk到压缩包
http://download.oracle.com/otn-pub/java/jdk/8u5-b13/jdk-8u5-linux-x64.tar.gz
tar xvf jdk-8u5-linux-x64.tar.gz mv jdk1.8* /usr/local/java
第三步:配置环境变量
<1># vi /etc/profile<2>在最后加入以下几行:
JAVA_HOME=/usr/local/java
JRE_HOME=/usr/local/java/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/jt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
<3>保存好上面到配置后 使配置立即生效在终端输入命令 source /etc/profile
第四步:安装apktool工具
wget https://android-apktool.googlecode.com/files/apktool1.5.2.tar.bz2 wget https://android-apktool.googlecode.com/files/apktool-install-linux-r05-ibot.tar.bz2 上面链接下载不了的话可以在这里下载http://ibotpeaches.github.io/Apktool/install/ tar xvf apktool1.5.2.tar.bz2 tar xvf apktool-install-linux-r05-ibot.tar.bz2 mv apktool1.5.2 /usr/local/apktool mv apktool-install-linux-r05-ibot /usr/local/aapt vim /etc/profile export PATH=$PATH:/usr/local/aapt:/usr/local/apktool cp /usr/local/aapt/* /usr/local/bin/ cp /usr/local/apktool/* /usr/local/bin/
反编译命令 apktool d -f com.paipai.apk android 打包命令apktool b -f android android.apk
第五步:给打包出来到apk签名
如果有修改里面的文件内容需要使用签名工具给apk包重新签名,否则不能在手机上成功安装
签名需要使用到两个工具keytool,jarsigner,只要成功安装了jdk就可以使用这两个工具
签名的时候需要使用.keystore 文件来 加入签名中
第1步:生成keystore
keytool -genkey -v -keystore android.keystore -alias android.keystore -keyalg RSA -validity 20000
这里得到一个名为android.keystore文件 其密码在命令里面设置了在下面到 签名步骤中要用到 该密码
第2步:jarsigner签名apk
jarsigner -verbose -keystore android.keystore -signedjar android_signed.apk android.apk android.keystore
到这一步会得到一个已经签过名的android_signed.apk到apk文件,这个文件可以拿去手机上面安装了
问题概括及解决到方法
1 签名后到文件不能正常安装
造成无法签名错误的原因,初步估计是JDK版本的问题。JDK 1.6签名没事,但是1.7会出这个问题
在签名时,要加上2个参数: -digestalg SHA1 -sigalg MD5withRSA
jarsigner -verbose -storepass 123456 -digestalg SHA1 -sigalg MD5withRSA -keystore android.keystore -signedjar android_signed.apk android.apk android.keystore
注 :-storepass 123456 这是android.keystore文件到密码
原因在于:64位系统中安装了32位程序。 apktool是32位
那么为了解决以上问题,我们需要安装:glibc.i686,zlib.i686,libstdc++.i686
如果你是云主机,那么很可能执行以下明步骤的时候会提示你:
No package glibc.i686 available
No package zlib.i686 available.
No package libstdc.i686 available.
原因是云主机一般配置的都是纯净64位系统
到这个步骤的时候,我们就要去修改yum 配置文件了,如下:
在/etc/yum.conf里面有
exclude选项,把这行删掉就可以了
现在去执行以下三步操作,那么appt命令就可以正常执行了
1.yum install glibc.i686
之后发现如下错误error while loading shared libraries: libz.so.1,ok继续安装libz
2.sudo yum install zlib.i686
之后发现error while loading shared libraries: libstdc++.so.6,执行
3.sudo yum install libstdc++.i686
安装 libstdc++.i686 报错:
Error: Protected multilib versions: libstdc++-4.4.7-11.el6.i686 != libstdc++-4.4.6-4.el6.x86_64
解决方法:
更新: yum update libstdc++-4.4.6-4.el6.x86_64
然后在安装: sudo yum install libstdc++-4.4.7-11.el6.i686
注:只要注意执行时到报错信息,注意版本到安装就可以解决该问题
附上keytool参数以及jarsigner参数:
keytool用法:
-certreq [-v] [-protected]
[-alias <别名>] [-sigalg <sigalg>]
[-file <csr_file>] [-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-changealias [-v] [-protected] -alias <别名> -destalias <目标别名>
[-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-delete [-v] [-protected] -alias <别名>
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-exportcert [-v] [-rfc] [-protected]
[-alias <别名>] [-file <认证文件>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-genkeypair [-v] [-protected]
[-alias <别名>]
[-keyalg <keyalg>] [-keysize <密钥大小>]
[-sigalg <sigalg>] [-dname <dname>]
[-validity <valDays>] [-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-genseckey [-v] [-protected]
[-alias <别名>] [-keypass <密钥库口令>]
[-keyalg <keyalg>] [-keysize <密钥大小>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-help
-importcert [-v] [-noprompt] [-trustcacerts] [-protected]
[-alias <别名>]
[-file <认证文件>] [-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-importkeystore [-v]
[-srckeystore <源密钥库>] [-destkeystore <目标密钥库>]
[-srcstoretype <源存储类型>] [-deststoretype <目标存储类型>]
[-srcstorepass <源存储库口令>] [-deststorepass <目标存储库口令>]
[-srcprotected] [-destprotected]
[-srcprovidername <源提供方名称>]
[-destprovidername <目标提供方名称>]
[-srcalias <源别名> [-destalias <目标别名>]
[-srckeypass <源密钥库口令>] [-destkeypass <目标密钥库口令>]]
[-noprompt]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-keypasswd [-v] [-alias <别名>]
[-keypass <旧密钥库口令>] [-new <新密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-list [-v | -rfc] [-protected]
[-alias <别名>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-printcert [-v] [-file <认证文件>]
-storepasswd [-v] [-new <新存储库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
jarsigner用法: [选项] jar 文件别名
jarsigner -verify [选项] jar 文件
[-keystore <url>] 密钥库位置
[-storepass <口令>] 用于密钥库完整性的口令
[-storetype <类型>] 密钥库类型
[-keypass <口令>] 专用密钥的口令(如果不同)
[-sigfile <文件>] .SF/.DSA 文件的名称
[-signedjar <文件>] 已签名的 JAR 文件的名称
[-digestalg <算法>] 摘要算法的名称
[-sigalg <算法>] 签名算法的名称
[-verify] 验证已签名的 JAR 文件
[-verbose] 签名/验证时输出详细信息
[-certs] 输出详细信息和验证时显示证书
[-tsa <url>] 时间戳机构的位置
[-tsacert <别名>] 时间戳机构的公共密钥证书
[-altsigner <类>] 替代的签名机制的类名
[-altsignerpath <路径列表>] 替代的签名机制的位置
[-internalsf] 在签名块内包含 .SF 文件
[-sectionsonly] 不计算整个清单的散列
[-protected] 密钥库已保护验证路径
[-providerName <名称>] 提供者名称
[-providerClass <类> 加密服务提供者的名称
[-providerArg <参数>]] ... 主类文件和构造函数参数
更多推荐
所有评论(0)