簡體   English   中英

無法在設備上運行cordova應用程序或模擬器錯誤運行

[英]cannot run cordova application on device or emulators error running

當我試圖通過命令行運行我的Cordova應用程序時。 我的構建成功但在模擬器或設備上運行它在命令行上給我一個錯誤

錯誤:無法在設備上啟動應用程序:錯誤:無法安裝apk到設備:錯誤:找不到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調試。

隨着Visual Studio 2017和Cordova 7+出現了同樣的問題,但卻出現了不同的解決方案。 Cordova現在在輸出目錄中創建子文件夾: /platforms/android/build/outputs/apk/ debug /android-debug.apk

在cordova的GenericBuilder.jsbuild.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) {
............

也許這會對某人有所幫助,因為我花了兩個小時的時間來找到它。

我認為這是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;
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM