注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

android重签名  

来自王吉华   2015-09-17 14:41:08|  分类: 默认分类 |举报 |字号 订阅

  下载LOFTER 我的照片书  |

重签名

前言

  • 在android自动化过程中往往要求测试apk和被测apk签名一致,网上也有工具,但是往往会有一些问题导致签名不成功,报错,其实我们可以自己通过命令行进行重签名。

准备

  • java环境变量配置
  • android sdk配置
  • windows:winrar环境变了配置

手动重签名

  • 去除准备重新签名xxx.apk软件本身的签名 将apk文件后缀改为.zip,然后从winrar中删除META-INF文件夹,删除后重新将文件名改成apk的后缀
  • 命令行输入: jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore [keysotore路径] -storepass [storepass] -keypass [keypass] [xxx.apk你的apk路径] [keystore-alias]
  • 再对重签名apk进行优化 输入:zipalign -v 4 [resigner.apk的路径] 最后:resigner.apk就是我们自动化测试用的apk文件
  • 使用Java的keytool工具生成密钥
    "%JAVA_HOME%\bin\keytool.exe" -genkey -v -keystore android.keystore -alias android -keyalg RSA -validity 99999 android.keystore就是生成的密钥和证书存储文件;-alias定义了密钥别名是android;-keyalg指定了密钥算法,用的是非对称RSA算法;-validity指定了证书的有效天数。

脚本重签名

  • 其实这些步骤完全可以写成脚本形式来进行,下面共享了两个平台的脚本。windows下的.bat批量脚本以及mac下的shell脚本。
  • 目录结构:脚本目录中放入需重签名apk,.keystore文件
  • 脚本默认debug.keystore为签名,若需要其他签名,则需要修改脚本keystore相关变量
  • 重签名的apk会在当前目录下与"resigner_原apk名称"文件夹下
  • @ECHO OFF
    REM key的名称,key文件需要放在和bat文件同一目录下
    SET KEYSTORE_NAME=debug.keystore
    REM key的别名
    SET KEYSTORE_ALIAS=androiddebugkey
    REM key的密码
    SET KEYSTORE_STOREPASS=android
    SET KEYSTORE_KEYPASS=android
    REM 临时生成的apk文件名称
    SET TEMP_RESIGNER=resigner_
    FOR %%I IN (*.apk) DO (
    ECHO Resigner %%I
    REM *****BUILD A FOLDER WITH THE SAME NAME.
    ECHO BUILD A FOLDER WITH THE SAME NAME.
    REM 创建一个文件夹,创建之前如果存在需要先删除
    RD /S /Q %%I_
    MD %%I_
    REM 复制需要重新签名的apk文件以及debugkey到新的文件夹中
    COPY %%I %%I_
    COPY %KEYSTORE_NAME% %%I_
    CD %%I_
    winrar d -inul %%I META-INF
    ECHO JARSIGNER %%I
    REM 对jar包重新签名,这里签名放在下面的删除文件之前,如果放在删除文件后面需要加入不要把debug.key删除掉
    REM JARSIGNER -VERBOSE -KEYSTORE %KEYSTORE_NAME% -STOREPASS %KEYSTORE_STOREPASS% %%I %KEYSTORE_ALIAS% -KEYPASS %KEYSTORE_KEYPASS%
    JARSIGNER -digestalg SHA1 -sigalg MD5withRSA -VERBOSE -KEYSTORE %KEYSTORE_NAME% -STOREPASS %KEYSTORE_STOREPASS% %%I %KEYSTORE_ALIAS% -KEYPASS %KEYSTORE_KEYPASS%

    REM *删除复制进来的debugkey文件
    FOR %%J IN (*) DO (
    IF %%J NEQ %%I (
    ECHO DELETE FILE %%J
    DEL %%J
    )
    )

    ECHO ZIPALIGN %%I
    REM 使用android的zipalign工具对apk文件进行优化
    ZIPALIGN -v 4 %%I %TEMP_RESIGNER%%%I
    REM 检查apk文件是否被优化
    ZIPALIGN -c -v 4 %TEMP_RESIGNER%%%I
    ECHO DELETE TEMP APK
    REM 删除优化前的APK文件,保留优化后的APK
    DEL %%I
    CD ..
    )
    @ECHO OFF
    exit


    KEYSTORE_NAME="debug.keystore"
    KEYSTORE_ALIAS="androiddebugkey"
    KEYSTORE_STROEPASS="android"
    KEYSTORE_KEYPASS="android"

    filelist=`ls`
    for file in $filelist
    do
    if [[ "${file##*.}" == "apk" ]]; then
    #statements
    file_name=${file%.*}
    FILE="$file_name.apk"
    FILE2="$file_name.zip"
    FILE3="$file_name"
    FILE1="resigner_$FILE3"
    if [[ -e $FILE1 ]]; then
    #statements
    rm -rf $FILE1
    fi
    mkdir $FILE1
    cp -R debug.keystore $FILE1/debug.keystore
    #修改后缀名称
    cp -R $FILE "$FILE1/$FILE2"
    cd $FILE1
    #解压zip文件
    unzip -x "$FILE2"
    #删除META-INF文件
    #cd $FILE3
    rm -rf $FILE2
    rm -rf META-INF/
    #压缩文件
    #cd ..
    #rm -rf $FILE2
    filelist1=`ls`
    filename=" "
    for file in $filelist1
    do
    filename="$filename $file"
    done
    zip -r $FILE2 $filename
    for file in $filelist1
    do
    if [[ "${file##*.}" != "keystore" ]]; then
    #statements
    rm -rf $file
    fi
    done
    #删除原有apk,并重命名删除META-INF文件之后的zip包为apk
    mv $FILE2 "$FILE"
    #重签名apk
    jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore $KEYSTORE_NAME -storepass $KEYSTORE_STROEPASS -keypass $KEYSTORE_KEYPASS $FILE $KEYSTORE_ALIAS
    #zipalign优化
    zipalign -v 4 $FILE "$FILE1.apk"
    rm -rf $FILE
    #rm -rf $FILE3/
    rm -rf debug.keystore
    echo "重签名完成"
    fi
    done

    若有需要挫链接:http://pan.baidu.com/s/1jGiwSIE
  评论这张
 
阅读(318)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016