转储失败,因为无法加载资产

时间:2018-12-18 10:07:15

标签: linux bash gradle android-gradle

我想在.bashrc Ubuntu 18.04上创建别名以构建和安装APK,但是在这样的终端中遇到问题

W/asset   (22684): Asset path ./app/build/outputs/apk/debug/app-debug.apk is neither a directory nor file (type=1).
ERROR: dump failed because assets could not be loaded

这是我在.bashrc文件中写的别名

## install apk to device
alias apkinstall="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X install -r $1"

## build and install apk
alias buildAndInstallApk="./gradlew assembleDebug && apkinstall ./app/build/outputs/apk/debug/app-debug.apk"

## launch apk
alias launchDebugApk="adb shell monkey -p `aapt dump badging ./app/build/outputs/apk/debug/app-debug.apk | grep -e 'package: name' | cut -d \' -f 2` 1"

## build+install+launch apk
alias buildInstallLaunchDebugApk="buildAndInstallApk && launchDebugApk"

似乎每次打开终端时都会显示这些错误,因为我没有从这些路径所属的android项目目录中打开终端。

有什么办法解决这个问题吗?我们可以检查.bashrc中是否存在这些路径?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您可以轻松地检查路径是否作为别名或函数定义的一部分存在。

为方便起见,我已将您的别名转换为shell函数。

## build and install apk
buildAndInstallApk () {
    local p=app/build/outputs/apk/debug/app-debug.apk
    if [ -d "$p" ]; then
        ./gradlew assembleDebug &&
        apkinstall "$p"
    else
        echo "No $p here" >&2
    fi
}

顺便说一句,您的launchDebugApk定义包含一个反引号表达式,该表达式在定义别名时(而不是在您要使用别名时)进行求值。请在别名周围使用单引号,或将其也转换为函数(并可能升级到$(current millenium syntax)而不是`long since obsolescent backticks`);但这仍然不能解释为什么会出错。

从广义上讲,我基本上总是建议对别名使用函数。语法更加通用,可以避免各种不愉快的事情。