替换APK文件内容后重新打包签名脚本

由于业务需求,需要替换APK文件内容后重新打包签名,调研后发现使用JDK里提供的命令可以很方便地实现。关键命令如下:

jar -uf:替换apk文件内的某个文件或文件夹。

jarsigner:为apk文件签名

zipalign:对签名后的apk文件进行字节对齐优化

下面以替换某apk包中assets目录下的1.ini和2.ini文件,并重新打包签名优化为例,先放上脚本代码:

start.bat(windows版本)

SET KEYSTORE_NAME=.\data\signature.keystore
SET KEYSTORE_ALIAS=xxx
SET KEYSTORE_STOREPASS=xxx
SET KEYSTORE_KEYPASS=xxx

SET INPUT_APK=.\input.apk
SET META-INF=.\META-INF
SET ASSETS=.\assets

SET UNSIGNED=.\output\Unsinged.apk
SET SIGNED=.\output\Signed.apk
SET OPT=.\output\output.apk

copy %INPUT_APK% %UNSIGNED%

jar -uf %UNSIGNED% %META-INF%
jar -uf %UNSIGNED% %ASSETS%
@echo 替换文件完成!

jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore %KEYSTORE_NAME% -storepass %KEYSTORE_STOREPASS% -keypass %KEYSTORE_KEYPASS% -signedjar %SIGNED% %UNSIGNED% %KEYSTORE_ALIAS%
@echo 签名完成!

del /F /Q %OPT%
zipalign  4 %SIGNED% %OPT%
@echo 优化完成!

del /F /Q %UNSIGNED%
del /F /Q %SIGNED%
@echo 操作完成!

@pause

start.sh(Linux版本)

#!/bin/bash

KEYSTORE_NAME=./data/signature.keystore
KEYSTORE_ALIAS=xxx
KEYSTORE_STOREPASS=xxx
KEYSTORE_KEYPASS=xxx

INPUT_APK=./input.apk
META_INF=./META-INF
ASSETS=./assets

OUTPUT=./output/
UNSIGNED=./output/input.apk
SIGNED=./output/Signed.apk
OPT=./output/output.apk

cp $INPUT_APK $OUTPUT

jar -uf $UNSIGNED $META_INF
jar -uf $UNSIGNED $ASSETS
echo Replace OK!

jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore $KEYSTORE_NAME -storepass $KEYSTORE_STOREPASS -keypass $KEYSTORE_KEYPASS -signedjar $SIGNED $UNSIGNED $KEYSTORE_ALIAS
echo Signe OK!

rm -r $OPT
zipalign 4 $SIGNED $OPT
echo Zipalign ok!

rm -r $UNSIGNED
rm -r $SIGNED
echo Operate OK!

操作如下:

1、将apk包放在根目录下,命名为input.apk。将要替换的1.ini和2.ini文件放在assets目录下。

2、双击根目录下的start.bat(windows)或start.sh(linux or mac)。

3、待操作完成后,进入output目录即可看到生成的新apk包:output.apk。

注意事项:

1、必须安装JDK,配置好JDK的相关环境变量。

2、必须将zipalign加入到环境变量中,zipalign在Android SDK的build tool下。

3、将上述脚本里的相应参数改为实际的参数值,并在data目录下放入相应签名文件。

整个脚本执行的环境如图所示:

此外,需要在根目录下新建一个META-INF目录,并在里面放入原apk中META-INF目录对应的空文件(新建空文件并重命名为对应的名称即可),用于在重签名之前替换清空原签名文件。META-INF目录如下所示(不同的apk可能不同):

全文完!

时间: 2024-08-04 22:34:03

替换APK文件内容后重新打包签名脚本的相关文章

浅析:android的apk文件上线前加密和签名经验分享

第一步加密: 1.加密的意义 如果不对其软件进行加密很容易被人家反编译导致源代码的泄漏,查出服务器的地址而间接的收到攻击,等一系列问题. 2.加密的方法 可以使用爱加密网址:  http://www.ijiami.cn/     对apk进行加密,这是第三方提供的安全可靠!,详情可以参考:http://jingyan.baidu.com/album/925f8cb8151347c0dde0563d.html 第二部签名 第二部签名: 1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开

通过上传的APK文件,解析APK文件内容,获取应用权限包名等

通过上传的APK文件,解析APK文件内容,获取应用权限包名等 1工具导入: 下载aapt.exe反编译执行程序,放入Java工程资源文件夹下(具体路径自己可定义) 2编写ApkUtil类,获取apk文件信息 public class ApkUtil { public static final String VERSION_CODE = "versionCode"; public static final String VERSION_NAME = "versionName&q

android打成apk文件安装后,功能丢失

============问题描述============ 我的android程序直接从eclipse里安装到手机上,全部功能正常,bin文件夹自动生成apk文件的拷到手机安装后一部分功能用起来就有点不正常了.要是右击项目,android tools然后生成apk,然后把这个生成apk安装到手机后,用起来就更加不爽了! ============解决方案1============ 看问题描述判断很有可能是地图的key用的是开发版的原因,先前做过百度地图的,里面有2种呢,一种开发版的,一种发布版的,你

给R1用的DLNA.apk,从N1提取打包签名,方便播放

这个小巧的DLNA客户端比乐播更适合R1.从N1提取,正好airplay只有音频功能.不过需要使用安卓投屏设置一下自启动才能使用需要使用安卓投屏设置一下自启动才能使用需要使用安卓投屏设置一下自启动才能使用因为我不会修改,只是打包签名了,默认是不会自启动和开启服务的.投屏方法:https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=376491&highlight=r1下载链接:https://pan.baidu.com/s/1

日志文件内容的时间戳比对脚本

#!/bin/bash #The owner is Echo.Atlas mtime=`stat -c %Y /logs/blackhole/main.log` systime=`date +%s` if [ $[ $systime - $mtime ] -gt 21600 ] then echo "This file has been updated for more than 6 hours" else echo "The file status is true"

使用objective-zip库实现压缩文件内容的替换

功能需求: 公司项目要实现电子书连载功能,比如一开始只有前2章,后面更新了3-5章的话,需要把后三章的内容添加到原来的文件中,相应的目录也要修改.(以下拿epub格式的电子书为例.PS:epub实际上就是压缩文件) 思路:可以把现在的epub和新增的epub解压出来.把新的epub里面同名的文件覆盖掉旧的.新增的复制过去,再打包成epub. 这样操作的话,效率不高也比较消耗内存.所以去网上找了下有没有效率不错的第三方. objective-zip github地址:https://github.

Android Studio 打包签名教程

Android Studio中进行签名打包 https://www.jianshu.com/p/aca66a7f6ddd Android Studio中进行签名 首先点击Android Studio 的菜单栏下的build目录下的Generate signed APK 然后创建Keystore文件 按要求填好信息后,点击OK(记住所填的密码后面将会用到) 接下来将设置Keystore的存放路径及命名文件名称,该文件后缀默认为jks.点击OK. 填写之前设置的密码,点击Next,生成带签名的apk

基于 jq 实现拖拽上传 APK 文件,js解析 APK 信息

技术栈 jquery 文件上传:jquery.fileupload,github 文档 apk 文件解析:app-info-parser,github 文档 参考:前端解析ipa.apk安装包信息 -- app-info-parser 支持功能 点击或拖拽上传 apk 文件 校验文件类型及文件大小 js 解析 apk 文件信息展示并通过上传接口提交给后端 支持上传过程中取消上传 支持上传成功显示上传信息 支持解析.上传等友好提示 支持从历史记录(所有已上传文件)中选择一个 支持假文件处理,比如

[转]使用ant让Android自动打包的build.xml,自动生成签名的apk文件(支持android4.0以上的版本)

在android4.0以后的sdk里那个脚本就失效了,主要是因为 apkbuilder这个程序不见了: 人家sdk升级,我们的脚本也要跟上趟,修改一下喽. 上网一查,大家的文章还停留在我去年的脚本程度,算了,自己动手查阅了资料之后,具体实现如下: 在工程的根目录 创建2个文件,分别: 1.build.xml 2.build.properties build.xml的内容: [java] view plaincopyprint? <?xml version="1.0" encodi