制作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.执行命令

我们可以在<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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Crash问题(Java与Native) 1.问题介绍 Crash问题,无论是java侧还是native侧,在日常...
    RuByCon阅读 24,712评论 12 14
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,598评论 25 708
  • 我就是我,却不想做昙花一现烟火,盼望着做一只自由的小鸟,任意翱翔在蓝天,抛下所以的顾及和包袱,过自己想要的生活。 ...
    你的好友已下线555阅读 74评论 0 0
  • 嘀嘀嗒嗒敲打着琴键, 爱恨别离在指尖中蔓延... 脑海中浮想连绵, 回忆一起走过的画面, 希望此刻有你在我身边。 ...
    IT界的文艺青年阅读 373评论 1 0
  • 我的一个闺蜜在售楼部做营销工作,我特别喜欢过去找她玩。因为喜欢和她一起随客户去看现场户型,看着那未完成的一幢幢大楼...
    石榴裙子阅读 270评论 0 3