详细描述,如下(Anbox:如何安装Google Play商店并启用ARM(libhoudini)支持,简单方法):

Failed to install PACKAGE.NAME.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]


具体现象:

解决方案:

安装Google Play商店并启用ARM(libhoudini)支持,最新为181205,如下。

#!/bin/bash# Copyright 2018 root@geeks-r-us.de# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights to
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
# of the Software, and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.# For further information see: http://geeks-r-us.de/2017/08/26/android-apps-auf-dem-linux-desktop/# If you find this piece of software useful and or want to support it's development think of
# buying me a coffee https://www.buymeacoffee.com/YdV7B1rex# die when an error occurs
set -eOPENGAPPS_RELEASEDATE="20181205"
OPENGAPPS_FILE="open_gapps-x86_64-7.1-mini-$OPENGAPPS_RELEASEDATE.zip"
OPENGAPPS_URL="https://github.com/opengapps/x86_64/releases/download/$OPENGAPPS_RELEASEDATE/$OPENGAPPS_FILE"HOUDINI_URL="http://dl.android-x86.org/houdini/7_y/houdini.sfs"
HOUDINI_SO="https://github.com/Rprop/libhoudini/raw/master/4.0.8.45720/system/lib/libhoudini.so"COMBINEDDIR="/var/snap/anbox/common/combined-rootfs"
OVERLAYDIR="/var/snap/anbox/common/rootfs-overlay"
WORKDIR="$(pwd)/anbox-work"# check if script was started with BASH
if [ ! "$(ps -p $$ -oargs= | awk '{print $1}' | grep -E 'bash$')" ]; thenecho "Please use BASH to start the script!"exit 1
fi# check if user is root
if [ "$(whoami)" != "root" ]; thenecho "Sorry, you are not root. Please run with sudo $0"exit 1
fi# check if lzip is installed
if [ ! "$(which lzip)" ]; thenecho -e "lzip is not installed. Please install lzip.\nExample: sudo apt install lzip"exit 1
fi# check if squashfs-tools are installed
if [ ! "$(which mksquashfs)" ] || [ ! "$(which unsquashfs)" ]; thenecho -e "squashfs-tools is not installed. Please install squashfs-tools.\nExample: sudo apt install squashfs-tools"exit 1
elseMKSQUASHFS=$(which mksquashfs)UNSQUASHFS=$(which unsquashfs)
fi# check if wget is installed
if [ ! "$(which wget)" ]; thenecho -e "wget is not installed. Please install wget.\nExample: sudo apt install wget"exit 1
elseWGET=$(which wget)
fi# check if unzip is installed
if [ ! "$(which unzip)" ]; thenecho -e "unzip is not installed. Please install unzip.\nExample: sudo apt install unzip"exit 1
elseUNZIP=$(which unzip)
fi# check if tar is installed
if [ ! "$(which tar)" ]; thenecho -e "tar is not installed. Please install tar.\nExample: sudo apt install tar"exit 1
elseTAR=$(which tar)
fi# use sudo if installed
if [ ! "$(which sudo)" ]; thenSUDO=""
elseSUDO=$(which sudo)
fiif [ ! -d "$COMBINEDDIR" ]; then# enable overlay fs$SUDO snap set anbox rootfs-overlay.enable=true$SUDO snap restart anbox.container-managersleep 20
fiecho $OVERLAYDIR
if [ ! -d "$OVERLAYDIR" ]; thenecho -e "Overlay no enabled ! Please check error messages!"exit 1
fiecho $WORKDIR
if [ ! -d "$WORKDIR" ]; thenmkdir "$WORKDIR"
ficd "$WORKDIR"if [ -d "$WORKDIR/squashfs-root" ]; then$SUDO rm -rf squashfs-root
fi# get image from anbox
cp /snap/anbox/current/android.img .
$SUDO $UNSQUASHFS android.img# get opengapps and install it
cd "$WORKDIR"
if [ ! -f ./$OPENGAPPS_FILE ]; then$WGET -q --show-progress $OPENGAPPS_URL$UNZIP -d opengapps ./$OPENGAPPS_FILE
ficd ./opengapps/Core/
for filename in *.tar.lz
do$TAR --lzip -xvf ./$filename
donecd "$WORKDIR"
APPDIR="$OVERLAYDIR/system/priv-app"
if [ ! -d "$APPDIR" ]; then$SUDO mkdir -p "$APPDIR"
fi$SUDO cp -r ./$(find opengapps -type d -name "PrebuiltGmsCore")                 $APPDIR
$SUDO cp -r ./$(find opengapps -type d -name "GoogleLoginService")                $APPDIR
$SUDO cp -r ./$(find opengapps -type d -name "Phonesky")                      $APPDIR
$SUDO cp -r ./$(find opengapps -type d -name "GoogleServicesFramework")           $APPDIRcd "$APPDIR"
$SUDO chown -R 100000:100000 Phonesky GoogleLoginService GoogleServicesFramework PrebuiltGmsCore# load houdini and spread it
cd "$WORKDIR"
if [ ! -f ./houdini.sfs ]; then$WGET -q --show-progress $HOUDINI_URLmkdir -p houdini$SUDO $UNSQUASHFS -f -d ./houdini ./houdini.sfs
fiBINDIR="$OVERLAYDIR/system/bin"
if [ ! -d "$BINDIR" ]; then$SUDO mkdir -p "$BINDIR"
fi$SUDO cp -r ./houdini/houdini "$BINDIR/houdini"$SUDO cp -r ./houdini/xstdata "$BINDIR/"
$SUDO chown -R 100000:100000 "$BINDIR/houdini" "$BINDIR/xstdata"LIBDIR="$OVERLAYDIR/system/lib"
if [ ! -d "$LIBDIR" ]; then$SUDO mkdir -p "$LIBDIR"
fi$SUDO $WGET -q --show-progress -P "$LIBDIR" $HOUDINI_SO
$SUDO chown -R 100000:100000 "$LIBDIR/libhoudini.so"$SUDO mkdir -p "$LIBDIR/arm"
$SUDO cp -r ./houdini/linker "$LIBDIR/arm"
$SUDO cp -r ./houdini/*.so "$LIBDIR/arm"
$SUDO cp -r ./houdini/nb "$LIBDIR/arm"$SUDO chown -R 100000:100000 "$LIBDIR/arm"# add houdini parser
$SUDO mkdir -p "$OVERLAYDIR/system/etc/binfmt_misc"
echo ":arm_dyn:M::\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x28::/system/bin/houdini:" >> "$OVERLAYDIR/system/etc/binfmt_misc/arm_dyn"
echo ":arm_exe:M::\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28::/system/bin/houdini:" >> "$OVERLAYDIR/system/etc/binfmt_misc/arm_exe"
$SUDO chown -R 100000:100000 "$OVERLAYDIR/system/etc/binfmt_misc"# add features
C=$(cat <<-END<feature name="android.hardware.touchscreen" />\n<feature name="android.hardware.audio.output" />\n<feature name="android.hardware.camera" />\n<feature name="android.hardware.camera.any" />\n<feature name="android.hardware.location" />\n<feature name="android.hardware.location.gps" />\n<feature name="android.hardware.location.network" />\n<feature name="android.hardware.microphone" />\n<feature name="android.hardware.screen.portrait" />\n<feature name="android.hardware.screen.landscape" />\n<feature name="android.hardware.wifi" />\n<feature name="android.hardware.bluetooth" />"
END
)C=$(echo $C | sed 's/\//\\\//g')
C=$(echo $C | sed 's/\"/\\\"/g')if [ ! -d "$OVERLAYDIR/system/etc/permissions/" ]; then$SUDO mkdir -p "$OVERLAYDIR/system/etc/permissions/"$SUDO cp "$WORKDIR/squashfs-root/system/etc/permissions/anbox.xml" "$OVERLAYDIR/system/etc/permissions/anbox.xml"
fi$SUDO sed -i "/<\/permissions>/ s/.*/${C}\n&/" "$OVERLAYDIR/system/etc/permissions/anbox.xml"# make wifi and bt available
$SUDO sed -i "/<unavailable-feature name=\"android.hardware.wifi\" \/>/d" "$OVERLAYDIR/system/etc/permissions/anbox.xml"
$SUDO sed -i "/<unavailable-feature name=\"android.hardware.bluetooth\" \/>/d" "$OVERLAYDIR/system/etc/permissions/anbox.xml"if [ ! -x "$OVERLAYDIR/system/build.prop" ]; then$SUDO cp "$WORKDIR/squashfs-root/system/build.prop" "$OVERLAYDIR/system/build.prop"
fi# set processors
ARM_TYPE=",armeabi-v7a,armeabi"
$SUDO sed -i "/^ro.product.cpu.abilist=x86_64,x86/ s/$/${ARM_TYPE}/" "$OVERLAYDIR/system/build.prop"
$SUDO sed -i "/^ro.product.cpu.abilist32=x86/ s/$/${ARM_TYPE}/" "$OVERLAYDIR/system/build.prop"$SUDO echo "persist.sys.nativebridge=1" >> "$OVERLAYDIR/system/build.prop"# enable opengles
$SUDO echo "ro.opengles.version=131072" >> "$OVERLAYDIR/system/build.prop"$SUDO $SUDO snap restart anbox.container-manager

安装过程可能会出现失败,请检查网络,并确保安装版本为最新。

失败!!!

安装成功!!!

这里有商店了,继续如下:

将services和store的权限全部打开!

然后,再使用adb安装之前失败的应用,发现全部成功了。

adb install Downloads/ROSAPPS/anki_cozmo_310.apk

这时候就可以使用任何手机上可以用的APP,愉快玩耍了。


具体安装和配置流程如下(机器翻译):

Anbox或Box中的Android是一个免费的开源工具,允许在Linux上运行Android应用程序。它的工作原理是在LXC容器中运行Android运行时环境,重新创建Android的目录结构作为可安装的循环映像,同时使用本机Linux内核来执行应用程序。

它的主要功能是安全性,性能,集成和融合(根据不同的外形尺寸),根据其网站。

使用Anbox,每个Android应用程序或游戏都在一个单独的窗口中启动,就像系统应用程序一样,它们的行为或多或少类似于常规窗口,显示在启动器中,可以平铺等等。默认情况下,Anbox不发货使用Google Play商店或支持ARM应用程序。要安装应用程序,您必须下载每个应用APK并使用adb手动安装。此外,安装ARM应用程序或游戏默认情况下不能使用Anbox - 尝试安装ARM应用程序会导致显示以下错误:

Failed to install PACKAGE.NAME.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]

您可以在Box中手动为Android应用程序(通过libhoudini)设置Google Play商店和支持ARM应用程序,但这是一个非常复杂的过程。为了更容易在Anbox上安装Google Play商店和Google Play服务,并让它支持ARM应用程序和游戏(使用libhoudini),geeks-r-us.de(链接文章是德语)的人创建了一个自动执行这些任务的脚本。

在使用它之前,我想明确指出,即使在集成libhoudini用于ARM支持之后,并非所有Android应用程序和游戏都能在Anbox中运行。某些Android应用程序和游戏可能根本不会出现在Google Play商店中,而其他应用程序和游戏可能无法安装但无法使用。此外,某些应用程序可能无法使用某些功能。

安装Google Play商店并在Anbox上启用ARM应用程序/游戏支持(Android in a Box)

如果您的Linux桌面上尚未安装Anbox,这些说明显然不起作用。如果您还没有,请按照此处的安装说明安装Anbox 。此外,请确保anbox.appmgr在安装Anbox之后和使用此脚本之前至少运行一次,以避免遇到问题。另外,确保在执行下面的脚本时Anbox没有运行(我怀疑这是导致评论中提到的这个问题的原因)。

1.安装所需要的依赖(wget,lzip,unzip和squashfs-tools)。

在Debian,Ubuntu或Linux Mint中,使用此命令安装所需的依赖项:

sudo apt install wget lzip unzip squashfs-tools

2.下载并运行脚本,在Box安装中自动下载并安装Android Play上的Google Play商店(和Google Play服务)和libhoudini(用于ARM应用/游戏支持)。

警告:永远不要在不知道它做什么的情况下运行你没写过的脚本。在运行此脚本之前,请查看其代码。

要下载脚本并使其可执行,请在终端中使用以下命令:

wget https://raw.githubusercontent.com/geeks-r-us/anbox-playstore-installer/master/install-playstore.sh
chmod +x install-playstore.sh

更新2018年11月29日:该install-playstore.sh脚本会下载旧的open-gapps版本,因此,Google Play商店会在启动后立即关闭。修复方法是修改脚本以下载更新版本的open-gapps。您可以使用install-playstore.sh文本编辑器打开脚本,并将OPENGAPPS_RELEASEDATE值更改为更新的日期,您可以从此处获取,或运行以下命令自动执行此操作(它将使用20181129日期):

sed -i 's/^OPENGAPPS_RELEASEDATE.*/OPENGAPPS_RELEASEDATE="20181129"/' install-playstore.sh

3.现在您可以运行脚本:

sudo ./install-playstore.sh

4.要让Google Play商店在Anbox中运行,您需要为Google Play商店和Google Play服务启用所有权限

为此,请运行Anbox:

anbox.appmgr

然后转到Settings > Apps > Google Play Services > Permissions并启用所有可用权限。为Google Play商店做同样的事情!

Anbox Google Play权限

您现在应该可以使用Google帐户登录Google Play商店。

如果未启用Google Play商店和Google Play服务的所有权限,则在尝试登录Google帐户时可能会遇到问题,并显示以下错误消息:“ 无法登录。与Google服务器通信时出现问题。请尝试再次 “,你可以在这个截图中看到:

Anbox与Google服务器通信时出现问题

登录后,您可以停用某些Google Play商店/ Google Play服务权限。

如果您在Anbox上登录Google帐户时遇到一些连接问题,请确保其anbox-bride.sh正在运行:

开始吧:
sudo /snap/anbox/current/bin/anbox-bridge.sh start

重启它:
sudo /snap/anbox/current/bin/anbox-bridge.sh restart

根据该用户的说法,如果继续与Anbox存在连接问题,您可能还需要安装dnsmasq软件包。但是在我的Ubuntu 18.04桌面上不需要这样做。


----

Fin

----

Anbox安装apk失败(提示Failure res=-113等)的解决方法相关推荐

  1. Win7使用金山毒霸提示“安装引擎失败,不支持此接口”的解决方法

    很多Win7系统用户在使用金山毒霸的时候,会遇到金山毒霸提示示"安装引擎失败,不支持此接口"的情况.那么,金山毒霸提示安装引擎失败该怎么办呢?下面小编为大家带来Win7使用金山毒霸 ...

  2. 开机或者安装系统时提示tsc: Fast TSC calibration failed解决方法

    开机或者安装系统时提示tsc: Fast TSC calibration failed解决方法 参考文章: (1)开机或者安装系统时提示tsc: Fast TSC calibration failed ...

  3. IDEA中导入项目运行失败提示Illeagle Arguement,访问404解决方法(Idea的Modules设置)

    文章目录 IDEA中导入项目运行失败提示Illeagle Arguement,访问404解决方法(Idea的Modules设置) 起因 尝试1:设置resources文件 尝试2:啃代码 尝试3:完全 ...

  4. 安装apk文件时的常见的错误及解决方法

    1.INSTALL_FAILED_INVALID_APK:无效的安装包,安装包已损坏  请检查安装包是否完整.如果是xpk包,可以通过手动安装xpk来检测一下.如果是apk包,请重新下载.  2.IN ...

  5. 安装显卡驱动提示“未找到兼容图形设备”的解决方法

    对于一些实用比较老的显卡的朋友来说,要想安装一下最新的驱动可能会遇到下图这样的问题 这个原因是因为驱动程序所包含的硬件id和机器上的显卡硬件id不匹配导致的,我们只需要修改一下驱动程序的inf文件就可 ...

  6. virtualBox安装驱动失败:找不到指定模块解决方法

    找不到指定模块 如果找不到桥接驱动,就要安装驱动,解决方案网上很多,这里就不一一列举了,关键是当你安装驱动,从磁盘安装netlwf,显示找不到模块功能,主要原因是你已经安装了VMware,与Vistr ...

  7. win10计算机系统盘不足,升级win10失败提示“系统盘剩余空间不足”怎么解决

    小伙伴用360升级win10正式版系统后弹出"系统盘剩余空间不足"的提示,造成无法升级成功,怎么回事?这种情况多见于硬盘不超过80G的机子,可以通过360对系统盘进行瘦身,释放更多 ...

  8. 安装包安装失败,返回代码res=-113

    安装包安装失败,返回代码res=-113 报错如下: Installation failed with message Failed to finalize session : INSTALL_FAI ...

  9. android studio 安装apk失败,AndroidStudio安装apk时失败时提示INSTALL_PARSE_FAILED_NO_CERTIFICATES...

    安装apk时提示INSTALL_PARSE_FAILED_NO_CERTIFICATES错误,说明要安装的apk未进行签名,需签名后方可安装. 在android studio中增加签名方法,直接在ap ...

最新文章

  1. 自己动手,做一款抬头显示的「Todo Hud」
  2. RabbitMQ持久化交换机队列
  3. 美国计算机科学专业申请要求,美国计算机科学专业申请条件
  4. Network 第六篇 - 三层交换机配置路由功能
  5. python用户登录a_用Python实现用户登录接口
  6. stm32f407 spi3 mosi没有输出_入门篇 | STM32F407寄存器开发点灯
  7. 2台mysql集群_如何安装配置基于2台服务器的MySQL集群
  8. linux查看硬件以及系统信息
  9. win10 系统把装在c盘的软件移到其他盘的方法
  10. 解决vs编译后运行提示“系统找不到指定的文件”的问题
  11. android的平台签名工具,《安卓开发》APK签名工具使用方法
  12. mac版本钉钉6.0.18版本无法获取摄像头权限问题
  13. scram-sha1
  14. ArcGIS之修改图层要素名称
  15. 物流数据可视化大屏(智慧物流)
  16. 干IT的这几年(这是一篇软文)
  17. DM6437评估板技术手册
  18. 天气数据采集微服务的实现:数据采集组件、数据存储组件
  19. 【Python爬虫系列教程 5-100】 Requests高级用法:文件上传,如何设置SSL证书验证、处理超时设置 、身份认证和代理设置
  20. 前端jsp通过点击按钮发送一个后端请求,并将表单数据一并发送到后端

热门文章

  1. VAF,MAF,肿瘤纯度,MCF,CCF的概念和计算方法 (转载)
  2. 一个DataFrame赋值的诡异报错 A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc
  3. 【算法编程】乘方取模
  4. Java输出4位数整数,输出这个数的千位,百位,十位,个位
  5. 2步学会word怎么看字数(图文)
  6. 规模决定利润 网吧规模扩充升级参考方案(转)
  7. 微信公众平台接口调试工具json格式不对怎么搞_一步步教你打造微信公众号文章爬虫(3)-批量下载...
  8. 解决微信公众平台IP白名单
  9. 2017年计算机二级考试的word的答案,2017年3月全国计算机考试等级考试二级《MS Office高级应用》真题及答案...
  10. 轻松读书——麦肯锡教我的写作武器