无法在设备上运行cordova应用程序或模拟器错误运行

时间:2015-01-19 14:19:33

标签: android cordova

当我尝试通过命令行运行我的Cordova应用程序时。我的构建成功但在模拟器或设备上运行它在命令行上给我一个错误

  

错误:无法在设备上启动应用程序:错误:无法执行   安装apk到d evice:错误:找不到apk架构:arm   build-type:debug ERROR运行一个或多个平台:错误:   cmd:命令失败,退出代码8您可能没有必需的   运行此项目的环境或操作系统

我在AndroidManifest.xml文件中指定了最小的sdk版本

 uses-sdk android:minSdkVersion="10" android:targetSdkVersion="21" 

在模拟器上我正在运行API版本19,android 4.4.2和在移动设备上运行android 4.4.3并在Sony Xperia ultra t2上启用了USB调试。

3 个答案:

答案 0 :(得分:1)

使用Visual Studio 2017和Cordova 7+有同样的问题,但来到了不同的解决方案。 Cordova现在在输出目录中创建子文件夹:/platforms/android/build/outputs/apk/ debug /android-debug.apk

在cordova的 GenericBuilder.js build.js 现在只能继承我们正在寻找的方法)findOutputApksHelper脚本中,当然不会将该子目录添加到搜索掩码:

.....
function findOutputApksHelper (dir, build_type, arch) {
    var shellSilent = shell.config.silent;
    shell.config.silent = true;

    var ret = shell.ls(path.join(dir, '*.apk')).filter(function (candidate) {
.........

所以我改变了这个:

..........
function findOutputApksHelper (dir, build_type, arch) {
    var shellSilent = shell.config.silent;
    shell.config.silent = true;

    var subAPKMask = build_type + '\\*.apk';

    var ret = shell.ls(path.join(dir, subAPKMask)).filter(function (candidate) {
............

也许这会对某人有所帮助,因为我花了两个小时的时间来找到它。

答案 1 :(得分:0)

我认为这是cordova中的一个错误(仅在使用gradle时出现)。 它似乎是固定在当前的主分支(你可以使用cordova平台添加android @ master --usegit)

对于旧版本,我解决了这个问题:

项目中的cordova / lib /文件夹中有一个build.js文件。 此文件包含一个函数findOutputApksHelper,它检查生成的apks是否与特定的文件名方案匹配。 默认情况下,生成的调试apks名为android-debug-unaligned.apk,但该方法排除了包含" -unaligned"的所有文件。 我修改了这个函数:

function findOutputApksHelper(dir, build_type) {
    var ret = findApks(dir).filter(function(candidate) {
        // Need to choose between release and debug .apk.
        if (build_type === 'debug') {
            console.log("candidate: "+candidate);
            return /-debug/.exec(candidate);
        }
        if (build_type === 'release') {
            return /-release/.exec(candidate) && !/-unaligned/.exec(candidate);
        }
        return true;
    });

    ret = sortFilesByDate(ret);
    console.log("ret " + ret);
    if (ret.length === 0) {
        return ret;
}

    var archSpecific = !!/-x86|-arm/.exec(ret[0]);
    return ret.filter(function(p) {
        return !!/-x86|-arm/.exec(p) == archSpecific;
    });
}

答案 2 :(得分:0)

只需从debug / release文件夹中删除output.json文件。然后重试。