Note:在当前代码(59左右)之后,编译arm64能够直接带32位的so以及snapshot等,也就不需要以下办法了
目前使用chromium编译出来的SystemWebView.apk,仅会带一个当前arch的so库。
即,如果arch设置为arm,只有armeabi-v7a的lib;如果arch为arm64,只有arm64-v8a的lib。
而AOSP给予的供arm64所编译的webview.apk同时包含armeabi-v7a与arm64-v8a的lib。
我们需要使用chromium中的apk_merger.py这个脚本去做重新打包的工作。
实际上就是解压然后添加32bit lib进去然后重新打包,签名,对齐。
1.准备工作
首先我们需要准备如下几样东西:
- arch为arm的SystemWebView.apk
- arch为arm64的SystemWebView.apk
- 一个keystore,目前看来只需要自己生成的即可。
keystore的生成方法为使用jdk中的keytool工具生成。
以10.0.0.131服务器为例,使用如下命令进行生成
/usr/lib/jvm/java-7-openjdk-amd64/bin/keytool -genkey -alias sprdwebview.keystore -keyalg RSA -validity 40000 -keystore sprdwebview.keystore
其中alias为之后会使用的name
validity为有效期,这里是40000天,肯定够了
keystore为输出目标名字,一般和name一样
之后会填写一系列的签名信息,由于生成了这个combined webview.apk也会放在android src中重新make一遍,也就会重新洗掉这部分签名信息换上系统的,故这部分签名信息应该不重要。
2.执行命令
我们可以在<font color="#FF0000">[chromium_dir]/chromium/src/android_webview/tools </font> 目录下找到apk_merger.py这个脚本
这个脚本有6个参数,
parser.add_argument('--apk_32bit', required=True, type=os.path.abspath)
parser.add_argument('--apk_64bit', required=True, type=os.path.abspath)
parser.add_argument('--out_apk', required=True, type=os.path.abspath)
parser.add_argument('--zipalign_path', required=True, type=os.path.abspath)
parser.add_argument('--keystore_path', required=True, type=os.path.abspath)
parser.add_argument('--key_name', required=True)
parser.add_argument('--key_password', required=True)
argu | details |
---|---|
--apk_32bit | 32bit apk路径 |
--apk_64bit | 64bit apk路径 |
--out_apk | 输出的apk的路径 |
--zipalign_path | zip对齐工具路径 |
--keystore_path | 刚才生成的keystore路径 |
--key_name | 刚才生成的keystore名 |
--key_password | 刚才生成的keystore密码 |
比方说我会使用如下命令进行打包
~/chromium_dev/chromium/src/android_webview/tools/apk_merger.py –apk_32bit ./arm/SystemWebView.apk –apk_64bit ./arm64/SystemWebView.apk –out_apk ./out/webview.apk –zipalign_path ~/chromium_dev/chromium/src/third_party/android_tools/sdk/build-tools/23.0.0/zipalign –keystore_path
./keystore/sprdwebview.keystore –key_name sprdwebview.keystore –key_password s2beryhp
如果信息全部正确,那么会在方才设置的out_apk位置生成一个新的apk,这个apk就是我们需要的multi_lib版本apk