android Google play 2019.8 之后 强制app兼容64位架构

由于google 在2019.8 之后,app必须支持64位架构,为了有些新设备只支持64架构。现在,来回顾一下相关知识点和如何支持64位架构;

参考资料:
官网学习资源 https://developer.android.com/distribute/best-practices/develop/64-bit

cpu 架构和支持64位架构:
https://blog.csdn.net/qq_33413264/article/details/82783763  cpu架构介绍
http://www.babajiu.net/kepu/kxjs/201906/9087.html  怎么支持64位

CPU架构

目前常用的架构有这么四种,armeabi-v7a, arm64-v8a, x86, x86_64 ;

Platform32-bit libraries folder64-bit libraries folder
ARMlib/armeabi-v7alib/arm64-v8a
x86lib/x86lib/x86_64

注意:还有一种arm 是armeabi,但现在基本上是armeabi-v7a 较多,并且后者兼容前者。

App 需要适配吗?

一个原则:如果你的app 用了C库,native 代码,so 文件,就需要去适配。需要注意的是:不光是你的代码,而且关注你引用的第三方库;对于java 或kotlin 代码则不需要关注。

Analyze APK工具分析

Analyze apk 是as IDE 自带的工具,打开build > Analyaze Apk

launch APK analyzer

或者最简单的在as中双击apk 文件即可,就会进入到分析界面,然后找到lib 文件夹,查看:

图2
图2

看到了arm-v7 表示支持arm架构的32位,没有看到其他的目录arm64-v8a, 则不支持其他的,那我们需要添加支持对应的64位的arm64-v8a.

 解压apk 

看到lib 文件下有arm的两种架构,这样表示支持64 .

Android是如何加载So库的(参考其他人)

  • 程序对当前手机cpu架构(比如 armeabi-v7a)做了适配,那手机跑程序时候就直接在这个目录下找对应的so库,如果找不到就直接报错

  • 如果只对armeabi的手机cpu做适配,那么支持armeabi的手机都会去armeabi目录下找对应的so库

项目中如何适配(参考其他人)

  • 如果适配不止一个cpu架构,比如armeabi、 armeabi-v7a 、arm64-v8a这三个,那么一定要确保三个目录中的so库数目一样;第三方库如果支持者提供这三个cpu架构的so库,那非常理想,对应放到目录就可以;

  • 如果适配的上面三个cpu架构,第三方库只提供了两个cpu(比如armeabi、 armeabi-v7a)的库,那也要提供的armeabi的so库,复制一份(armeabi或者armeabi-v7a的so库,因为arm64-v8a兼容armeabi 和 armeabi-v7a)到没有提供的arm64-v8a这个架构目录下;如果不这么做,当应用跑到arm64-v8a架构的手机上时,找不到对应的so库就会报错

  • 具体自己项目适配几种cpu架构,得看app性质,比如微信,主要考虑到兼容,让几乎所有手机都可以适配,另外也相对减少了apk的大小;而另外一个app,比如游戏或者一些对手机性能有要求的app,这种app就挑用户了,只适配到armeabi-v7a,因为目前主流手机都支持armeabi-v7a,就算app支持到只支持armeabi这种架构的手机,app也未必能运行的起来,体验也未必好,算是app放弃也这些用户吧,再说使用只支持armeabi这种架构的手机估计年纪也大了,也不会使用到这个app;

  • 如果只适配一种cpu架构,armeabi(都兼容,但性能有所损耗,如微信和qq)或者armeabi-v7a(目前大部分手机都支持这种cpu架构(王者荣耀));

  • 如果app适配了armeabi、 armeabi-v7a 、arm64-v8a三种cpu架构,以我的手机mate9为例, mate9支持 armeabi、 armeabi-v7a 、arm64-v8a,那么app在找so文件时会从最新的一代的cpu 架构(arm64-v8a)找so文件,如果找不到会直接报错,不会再去armeabi-v7a 和armeabi里面找,一定要确保三个目录中的so库数目一样;如果适配armeabi、 armeabi-v7a,mate9手机上app在找so文件时会从armeabi-v7a找对应so,没有就报错;如果只适配一种,那么手机只要支持这种cpu架构,就会去这个文件夹下找对应的so,找不到就报错,如果手机不支持这种cpu架构就报错

总之一句话:如果app适配了某种架构,则其他的所有native库都需要适配该架构,否则运行到该库的时候会报错,因为他不会往其他的架构中寻找。另外,架构具有往下兼容,比如支持armeabi-v7a,也会支持armeabi, 所以只适配armeabi 也可以,不过没有发挥架构优势。

 

工程配置

// Your app's build.gradle
apply plugin: 'com.android.app'

android {
   compileSdkVersion 27
   defaultConfig {
       appId "com.google.example.64bit"
       minSdkVersion 15
       targetSdkVersion 28
       versionCode 1
       versionName "1.0"
       ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'

        其他的写法
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a' // 指定要ndk需要兼容的架构(这样其他依赖包里其他so会被过滤掉)
        }

ndk abiFilters 只会把你列举出来的so库打包到apk 中,但是假如你引用的库不支持64位的,而你配置了64位,这时候就需要联系库的出品方去修改,或者使用ndk abiFilters 过滤掉不支持的架构。现在可以看看百度地图的so 文件(如下图),大多数的native库会提供多种支持

注意:so 库在apk 体积占了很大的部分,比如图2中显示只支持一种架构,so文件占了20%,如果支持四种常见架构,那么app的体积会剧增,所以,google play 也不是要求我们支持所有的 64 位架构,但是对于已经支持的每种原生 32 位架构,就必须包含对应的 64 位架构

例如:

  • 对于 ARM 架构,有 armeabi-v7a(32位) 就必须 arm64-v8a(64位)。
  • 对于 x86 架构,有 x86(32位) 就必须有 x86_64(64位)

这就要求我们有对应的目录,并且目录中包含对应的 so 文件。APK 中提供了完备的 ABIs 支持,运行的之后,会选取对应的最优支持进行加载和使用。

需要注意的是,有时候我们将 32 位的 so 复制到 64 位中,运行不会出现异常,但是这依然存在隐患。最好的办法是根据不同的架构,编译对应的 so 文件,原则上,我们的目标是确保应用可以在仅支持 64 位架构的环境中正常运行。

 测试你的设备

# A successful install:
> adb install --abi armeabi-v7a YOUR_APK_FILE.apk
Success

# If your APK does not have the 64-bit libraries:
> adb install --abi arm64-v8a YOUR_APK_FILE.apk
adb: failed to install YOUR_APK_FILE.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]

# If your device does not support 64-bit, an emulator, for example:
> adb install --abi arm64-v8a YOUR_APK_FILE.apk
ABI arm64-v8a not supported on this device

测试:

X64 40 0 2214 115 Copyright 2011 Google Inc Google Chrome是由Google开发的一款设计简单 高效的Web浏览工具   原版 正式版 右键 属性 验证数字签名完整      下载Chrome企业和教育版 MSI封装   Google Chrome的特点是简洁 快速 Google Chrome支持多标签浏览 每个标签页面都在独立的“沙箱”内运行 在提高安全性的同时 一个标签页面的崩溃也不会导致其他标签页面被关闭 此外 Google Chrome基于更强大的JavaScript V8引擎 这是当前Web浏览器所无法实现的   Google Chrome是一款基于开源软件 借鉴了苹果的WebKit Safari使用的引擎 Mozilla的Firefox及其他相关应用   主要特性:    Chrome浏览器基于开源的Webkit 其中包含谷歌Gears    Chrome提供了浏览器扩展框架 可以制作与Adobe AIR类似的混合应用    包含V8 Javascript虚拟机 这个多线程的虚拟机可以加速Javascript的执行    具备隐私模式 可以让用户无需在本地机器上登录即可使用 这个功能与微软IE8中的Incognito类似    浏览器将内置防止“网络钓鱼”及恶意软件功能   Google Chrome也有Mac和Linux版本 ">X64 40 0 2214 115 Copyright 2011 Google Inc Google Chrome是由Google开发的一款设计简单 高效的Web浏览工具   原版 正式版 右键 属性 验证数字签名完整      下载Chrome企业和教育版 MSI封装   Google Chrome的特点是简洁 [更多]
### 回答1: package name: com.google.android.webview 是指Google提供的一个系统应用程序,用于在Android设备上运行和渲染WebView界面。WebView是一个Android平台上的组件,允许应用程序在自己的界面中嵌入浏览器功能。通过该包名,用户可以在Google Play商店找到和下载此应用程序。 Google的WebView应用程序是一个非常重要的工具,它为其他应用程序提供了在应用内显示网页的功能。许多应用程序,特别是浏览器和社交媒体应用,使用这个WebView组件来显示网页内容。在用户点击应用内的链接时,WebView会处理页面加载和渲染,实现无缝的浏览体验,同时保护用户的隐私和安全。 通过更新WebView应用程序,Google可以将最新的Web技术和安全更新带给设备上的所有应用程序。这样,用户不必等待整个操作系统的更新才能获得最新的浏览体验。另外,拥有独立的WebView应用程序还使Google可以更加灵活地向用户提供更新。 总之,在Android设备上,com.google.android.webview是一款由Google提供的系统应用程序,用于提供嵌入式浏览器功能的WebView组件。用户可以通过Google Play商店下载此应用程序,并通过及时的更新获得最新的Web浏览体验和安全性保障。 ### 回答2: Package name: com.google.android.webview 是指谷歌 Android 平台上的一个应用程序包。该应用程序包含谷歌Android 设备提供的内置 WebView 组件。 WebView 是一个能够在 Android 应用程序中嵌入浏览器功能的控件。通过 WebView,开发者可以在应用程序中显示网页内容,实现浏览器的基本功能,如加载网页、浏览网页、处理链接等。 com.google.android.webview 是一个在 Play 商店上提供下载的应用程序,用户可以通过下载安装该应用程序来更新 WebView 组件。WebView 组件的更新是由谷歌负责的,升级 WebView 可以使用户获得更好的浏览网页体验和更高的安全性。 通过维护 WebView 应用程序的更新,谷歌可以提供最新的浏览器功能和修复已知的漏洞,以确保用户的安全和隐私。 因此,com.google.android.webview 是一个非常重要的应用程序包,它可以提供给用户最新的 WebView 组件,并且能够不断改进用户在 Android 设备上的浏览网页体验。 ### 回答3: com.google.android.webview是一个在Google Play商店上可用的应用程序。它是由谷歌开发的一个用于Android系统的Web浏览器引擎。它可以提供更好的网页浏览体验,并允许用户在应用程序中加载和显示网页内容。com.google.android.webview可以作为系统级的组件,在Android设备上提供默认的Web浏览功能。它还提供了一些应用程序编程接口(API),允许开发人员在他们自己的应用程序中使用Web浏览器引擎的功能。通过使用com.google.android.webview,开发人员可以将网页内容嵌入到他们的应用程序中,从而创建出更丰富和交互式的用户体验。此外,com.google.android.webview还支持自动更新,这意味着用户不需要手动更新这个组件,他们总是可以使用最新的版本。总的来说,com.google.android.webview是一个非常有用的应用程序,它为用户提供了出色的Web浏览功能,并为开发人员提供了更多的灵活性和创造力来开发他们的程序。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值