2015-11-07 53 views
-2

我正在使用離子框架,並且我認爲自從上次更新時,每當我在Android ionic run android上運行時,所有的url都會返回404。 ionic serve工作正常,所以是ionic run ios在Android上運行離子始終返回404錯誤

所以這個問題只在android上。

  • 我添加了Cordova白名單插件,更改了我的config.xml和index.html,如下所示,仍然面臨同樣的問題。

config.xml中:

<?xml version='1.0' encoding='utf-8'?> 
<widget id="com.ionicframework.yeswegreen569862" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> 
    <name>MyAppName</name> 
    <description> 
     An Ionic Framework and Cordova project. 
    </description> 
    <author email="[email protected]" href="http://ionicframework.com/"> 
     Ionic Framework Team 
    </author> 
    <content src="index.html" /> 
    <access origin="*" /> 
    <allow-navigation href="*" /> 
    <allow-intent href="*" /> 
    <preference name="webviewbounce" value="false" /> 
    <preference name="UIWebViewBounce" value="false" /> 
    <preference name="DisallowOverscroll" value="true" /> 
    <preference name="android-minSdkVersion" value="16" /> 
    <preference name="BackupWebStorage" value="none" /> 
    <preference name="SplashScreen" value="screen" /> 
    <preference name="SplashScreenDelay" value="3000" /> 
    <feature name="StatusBar"> 
     <param name="ios-package" onload="true" value="CDVStatusBar" /> 
    </feature> 
    <platform name="android"> 
     <allow-navigation href="*" /> 
     <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" /> 
     <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" /> 
     <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" /> 
     <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" /> 
     <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" /> 
     <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" /> 
     <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" /> 
     <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" /> 
     <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" /> 
     <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" /> 
     <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" /> 
    </platform> 
    <platform name="ios"> 
     <allow-navigation href="*" /> 
     <icon height="57" src="resources/ios/icon/icon.png" width="57" /> 
     <icon height="114" src="resources/ios/icon/[email protected]" width="114" /> 
     <icon height="40" src="resources/ios/icon/icon-40.png" width="40" /> 
     <icon height="80" src="resources/ios/icon/[email protected]" width="80" /> 
     <icon height="50" src="resources/ios/icon/icon-50.png" width="50" /> 
     <icon height="100" src="resources/ios/icon/[email protected]" width="100" /> 
     <icon height="60" src="resources/ios/icon/icon-60.png" width="60" /> 
     <icon height="120" src="resources/ios/icon/[email protected]" width="120" /> 
     <icon height="180" src="resources/ios/icon/[email protected]" width="180" /> 
     <icon height="72" src="resources/ios/icon/icon-72.png" width="72" /> 
     <icon height="144" src="resources/ios/icon/[email protected]" width="144" /> 
     <icon height="76" src="resources/ios/icon/icon-76.png" width="76" /> 
     <icon height="152" src="resources/ios/icon/[email protected]" width="152" /> 
     <icon height="29" src="resources/ios/icon/icon-small.png" width="29" /> 
     <icon height="58" src="resources/ios/icon/[email protected]" width="58" /> 
     <icon height="87" src="resources/ios/icon/[email protected]" width="87" /> 
     <splash height="1136" src="resources/ios/splash/[email protected]~iphone.png" width="640" /> 
     <splash height="960" src="resources/ios/splash/[email protected]~iphone.png" width="640" /> 
     <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" /> 
    </platform> 
    <icon src="resources/android/icon/drawable-xhdpi-icon.png" /> 
    <preference name="xwalkVersion" value="15+" /> 
    <preference name="xwalkCommandLine" value="--disable-pull-to-refresh-effect" /> 
    <preference name="xwalkMode" value="embedded" /> 
    <preference name="xwalkMultipleApk" value="true" /> 
</widget> 

index.html中:

<!DOCTYPE html> 

    <html> 
     <head> 
     <meta charset="utf-8"> 
     <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> 
     <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"> 

<title></title> 
     <link href="lib/ionic/css/ionic.css" rel="stylesheet"> 
     <link href="css/style.css" rel="stylesheet"> 
     <link href="css/header.css" rel="stylesheet"> 
     <link href="css/tab-main.css" rel="stylesheet"> 
     <link href="css/cat-details.css" rel="stylesheet"> 
     <link href="css/tab-list.css" rel="stylesheet"> 
     <link href="css/tab-details.css" rel="stylesheet"> 
     <link href="css/tab-favorite.css" rel="stylesheet"> 
     <link href="css/tab-add.css" rel="stylesheet"> 
     <link href="css/tab-settings.css" rel="stylesheet"> 

     <!-- google maps javascript--> 
     <script src="http://maps.googleapis.com/maps/api/js?libraries=places"></script> 

     <!-- ionic/angularjs js --> 
     <script src="js/jquery.js"></script> 
     <script src="lib/ionic/js/ionic.bundle.js"></script> 
     <script src="js/angular-md5.js"></script> 

     <script src="js/ng-cordova.min.js"></script> 
     <!-- cordova script (this will be a 404 during development) --> 
     <script src="cordova.js"></script> 


     <script src="lib/ionic-timepicker/dist/ionic-timepicker.bundle.min.js"></script> 


     <script src="js/angular-translate.min.js"></script> 
     <script src="js/angular-ios9-uiwebview.js"></script> 
     <!-- your app's js --> 
     <script src="js/utils.js"></script> 
     <script src="js/app.js"></script> 
     <script src="js/controllers.js"></script> 
     <script src="js/services.js"></script> 
     </head> 
     <body ng-app="myappname"> 

     <ion-nav-bar class="bar-stable"> 
      <ion-nav-back-button> 
      </ion-nav-back-button> 
     </ion-nav-bar> 

     <ion-nav-view></ion-nav-view> 

     </body> 
    </html> 

app.js:

angular.module(' myappname', ['ionic', ' myappname.controllers', ' myappname.services', 'pascalprecht.translate','ngCordova','ionic-timepicker','ngIOS9UIWebViewPatch']) 

.run(['$ionicPlatform', '$rootScope',' myappnameService',function($ionicPlatform, $rootScope, myappnameService) { 
    $ionicPlatform.ready(function() { 
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard 
    // for form inputs) 
    if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) { 
     cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
     cordova.plugins.Keyboard.disableScroll(true); 

    } 
    if (window.StatusBar) { 
     // org.apache.cordova.statusbar required 
     StatusBar.styleLightContent(); 
    } 
    }); 

    $rootScope.errorCodes = { 
    '5001' : 'invalid_email', 
    '5002' : 'invalid_username', 
    '5003' : 'invalid_password', 
    '5004' : 'email_already_exits', 
    '5005' : 'username_already_exits', 
    '5006' : 'error_while_subscribing' 
    }; 
    $rootScope.categoriesPromise = myappnameService.getCategoriesWithSpots(); 

}]) 
.config(function($stateProvider, $urlRouterProvider, $translateProvider, $ionicConfigProvider) { 

    // $ionicConfigProvider.backButton.icon(' myappname-nav-back'); 
    $ionicConfigProvider.backButton.text('');// 
    $ionicConfigProvider.navBar.alignTitle('center'); 

    $stateProvider 
    // setup an abstract state for the tabs directive 
    .state('tab', { 
    url: '/tab', 
    abstract: true, 
    templateUrl: 'templates/tabs.html' 
    }) 


    // Each tab has its own nav history stack: 

    .state('tab.search', { 
    cache: false, 
    url: '/search', 
    views: { 
     'tab-search': { 
     templateUrl: 'templates/tab-search.html', 
     controller: 'SearchCtrl' 
     } 
    } 
    }) 
    .state('tab.main', { 
    cache: false, 
    url: '/main', 
    views: { 
     'tab-search': { 
     templateUrl: 'templates/tab-main.html', 
     controller :'SearchCtrl' 
     } 
     } 
    }) 
    .state('tab.cat-details', { 
    cache: false, 
    url: '/cat-details/:id', 
    views: { 
     'tab-search': { 
     templateUrl: 'templates/cat-details.html', 
     controller :'CategoryCtrl' 
     } 
     } 
    }) 
    .state('tab.favorite', { 
     cache: false, 
     url: '/favorite?loggedIn', 
     views: { 
     'tab-favorite': { 
      templateUrl: 'templates/tab-favorite.html', 
      controller: 'FavoriteCtrl' 
     } 
     } 
    }) 
    .state('tab.add', { 
    url: '/add?loggedIn', 
    views: { 
     'tab-add': { 
     templateUrl: 'templates/tab-add.html', 
     controller: 'AddCtrl' 
     } 
    } 
    }).state('tab.settings', { 
    url: '/settings?loggedIn', 
    views: { 
     'tab-settings': { 
     templateUrl: 'templates/tab-settings.html', 
     controller: 'SettingsCtrl' 
     } 
    } 
    }) 
    .state('tab.favsubscribe', { 
    url: '/favorite/subscribe', 
    views: { 
     'tab-favorite': { 
     templateUrl: 'templates/subscribe.html', 
     controller: 'AuthCtrl' 
     } 
    } 
    }) 
    .state('tab.favlogin', { 
    url: '/favorite/login', 
    views: { 
     'tab-favorite': { 
     templateUrl: 'templates/login.html', 
     controller: 'AuthCtrl' 
     } 
    } 
    }); 

    // if none of the above states are matched, use this as the fallback 
    $urlRouterProvider.otherwise('/tab/main'); 

    $ionicConfigProvider.tabs.position('bottom'); 

    $translateProvider.translations('en', { 
     search: "Search", 
     favorite: "Favorite", 
    }); 

    $translateProvider.translations('fr', { 
     search: "Recherche", 
     favorite: "Favoris", 
    }); 


    $translateProvider.preferredLanguage("en"); 


}); 

我service.js:

angular.module('myappname.services', []) 
.config(["$provide", function ($provide) { 
    var URL = "http://xxx.xx.xx.xx/html/myappname/"; 
    $provide.value("apiRoot", URL + "Service.php"); 
}]) 
.service('myappnameService', function ($http,apiRoot,$q) { 

    var deferred = $q.defer(); 
    var selectedCateogry = ''; 
    var searchTerm = ''; 

    this.getCategories = function(){ 
     $http.get(apiRoot+'?action=getCategories').then(function(data) { 
      deferred.resolve(data); 
     }); 
     return deferred.promise; 
    }; 
}); 
01使用插件的

最後名單:

com.ionic.keyboard 1.0.4 "Keyboard" 
com.synconset.imagepicker 1.0.7 "ImagePicker" 
cordova-plugin-console 1.0.1 "Console" 
cordova-plugin-crosswalk-webview 1.4.0 "Crosswalk WebView Engine" 
cordova-plugin-device 1.0.1 "Device" 
cordova-plugin-directions 0.4.3 "Directions" 
cordova-plugin-geolocation 1.0.1 "Geolocation" 
cordova-plugin-inappbrowser 1.0.1 "InAppBrowser" 
cordova-plugin-splashscreen 2.1.0 "Splashscreen" 
cordova-plugin-whitelist 1.0.0 "Whitelist" 
cordova-plugin-x-socialsharing 5.0.6 "SocialSharing" 
org.apache.cordova.file 1.3.3 "File" 
org.apache.cordova.file-transfer 0.5.0 "File Transfer" 
  • 我檢查AndroidManifest和我有Internet權限

我使用離子到1.7.8,科爾多瓦5.4.0

還有什麼我應該做的,以使其工作?

+0

你試過'allow-intent'嗎? – JesseMonroy650

+0

是的。注意到這個情況發生後,我更新離子1.7.8 –

+0

好吧。您**可能需要將您的代碼部分公開爲可見。也就是說,config.xml和index.html(或等效),也許可能是您的主要JavaScript庫。請回復,確保使用我的手柄。 – JesseMonroy650

回答

3

對於普通開發人員而言,您有很多問題並不明顯。主要是因爲閱讀某些內容很容易,而沒有意識到它可能不適用。不過,好消息是你的代碼比大多數人的代碼更乾淨。

  1. <feature (...)>不適用於CLI。它旨在用於SDK。請參閱:The config.xml File,向下滾動。它靠近底部說:

    如果您使用CLI構建應用程序(...),則該元素不適用於您的工作流程。

    總之,這條線沒有做任何事 - 當然不是你打算做的事。

  2. <platform (...)>元素不適用於whitelist。您將會在whitelist文檔中看到它顯着丟失。這是一個常見的錯誤。我不確定它是否在legacy-whitelist;或者僅僅是開發人員錯誤的邏輯跳躍。

移動你的白名單的東西<platform (...)> XML機箱外。它不應該是平臺的孩子。 FWIW:whitelist大多數適用於Android並偶爾出現在其他平臺上。

  • 如果您需要幫助應用白名單,這裏是一個DOC:
    HOW TO apply the Cordova/Phonegap the whitelist system

  • <preference>, <feature> and <platform>是混亂。即使這還沒有完成,這個文件將有所幫助。 The <preference> mess

  • 你必須等待火觸及直到deviceready事件觸發後,網絡或任何移動設備服務(尤其是那些科爾多瓦控制)的任何代碼。如果您將所有的JavaScript <!-- your app's js -->移動到您的</body>標記下方,這通常會起作用。

  • 這是另一個可能有幫助的文檔。 Top Mistakes by Developers new to Cordova/Phonegap

  • +0

    哇你比較詳細的審查,這真的給了我一個在科爾多瓦的開端,因爲我剛剛開始 –

    +0

    我做了所有的變化,仍然有問題。對於暫時我donwgraded到4.3.1 –

    +0

    是的,最新版本的Cordova仍然存在一些bug。看,如果你能識別這些錯誤。然後,我會在bug庫中找到這些錯誤,以便您可以幫助投票修正這些錯誤。好運。 – JesseMonroy650