制作32+64 multi-lib的webview.apk

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.准备工作

首先我们需要准备如下几样东西:

  1. arch为arm的SystemWebView.apk
  2. arch为arm64的SystemWebView.apk
  3. 一个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.执行命令

我们可以在[chromium_dir]/chromium/src/android_webview/tools 目录下找到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

你可能感兴趣的:(制作32+64 multi-lib的webview.apk)