前面本身學習搭建了一個簡單的Vue項目
因爲考慮到公司須要翻新的項目是Android,因此學習下用Cordova打包
踩坑持續更新javascript
Android
環境以及Java
環境ANDROID_HOME
,值爲Android安裝目錄
%ANDROID_HOME%\tools
和%ANDROID_HOME%\platform-tools
JAVA_HOME
,值爲Java安裝目錄
%JAVA_HOME%\bin\
和%JAVA_HOME%\jre\bin\
若是安裝過就不用再安裝了
這裏解釋下爲何用 8.1.2 版本html由於我當時默認 npm install -g cordova 安裝的話是默認 9.0.0 版本的
可是 9.0.0 版本 cordova build android 的時候報錯
Using 「requireCordovaModule」 to load non-cordova module 「q」 is not supported.
關於這個錯誤百度搜索說是 9.0.0 版本的坑,具體緣由未知,使用 8.1.2 版本正常
若想深刻了解可參考GitHub上的issues
附上連接:https://github.com/xpbrew/cordova-sqlite-storage/issues/856前端
npm install -g cordova@8.1.2
cmd 執行四步命令(可簡化爲三步)vue
// cordovaApp:項目的目錄名稱(path) // com.cordova.test:項目的ID,用於寫入 config.xml 的 widget 中(ID) // HelloWorld:應用程序的顯示名稱(name) // 項目的可選配置項(options) // --template:可執行項目的模版文件 // --copy-from:指定 src // --link-to:將前端資源目錄連接到 cordova 項目的 www 目錄下 cordova create cordovaApp com.cordova.test HelloWorld // 進入 cordovaApp 項目目錄 cd cordovaApp // 添加插件(此步驟可忽略),預防部分機型 webView 版本低致使 Vue App 真機白屏 cordova plugin add cordova-plugin-crosswalk-webview // 添加 Android 平臺 // 執行此步驟會有以下提示: // So the minSdkVersion of Cordova project is configured to 16 by default. // 是由於 cordova-plugin-crosswalk-webview 對 minSkd 的版本有限制 cordova platform add android
在head中加入以下代碼java
<!--防止跨站腳本攻擊 start--> <!--非必須,但建議添加。可能致使頁面樣式改變,如若改變請註釋掉--> <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;"> <!--防止跨站腳本攻擊 end--> <meta name="format-detection" content="telephone=no"> <meta name="msapplication-tap-highlight" content="no"> <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
在body中引入cordova.js,示例以下android
<body> <div id="app"></div> <script type="text/javascript" src="cordova.js"></script> <!-- built files will be auto injected --> </body>
// 修改 build 中 assetsPublicPath 的值爲 build: { assetsPublicPath: './', }
npm install vue-cordova --save
import VueCordova from 'vue-cordova' Vue.use(VueCordova);
運行可能會報
Uncaught SyntaxError: Unexpected token '<'
錯誤,可忽略git
// 運行 Vue 項目 npm run dev // 執行項目打包 npm run build
cordova build android
cordova build android --release
// -genkey: 執行生成數字證書 // -v: 將生成證書的詳細信息打印置 dos 窗口 // -keystore XXX.keystore: 數字證書的文件名爲 XXX.keystore(XXX自定義) // -alias XXX.keystore: 證書別名 // -keyalg RSA: 生成密鑰文件採用 RSA 算法 // -validity: 證書有效期 keytool -genkey -v -keystore XXX.keystore -alias XXX.keystore -keyalg RSA -validity 36500
cd waitsign jarsigner -verbose -keystore XXX.keystore -signedjar name.apk app-armv7-release-unsigned.apk XXX.keystore
keytool -list -v -keystore ./XXX.keystore -storepass "你設置的密碼"
uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library... Suggestion: use a compatible library with a minSdk of at most 16, or increase this project's minSdk version to at least 19, ......
修改Cordova項目platforms\android\CordovaLib中的AndroidManifest.xml文件github
<!--將 minSdkVersion 的值改成 16--> <uses-sdk android:minSdkVersion="16" />
修改Cordova項目platforms\android\app\src\main中的AndroidManifest.xml文件web
<!--將 minSdkVersion 的值改成 16--> <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="27" />
修改Cordova項目platforms\android中的build.gradle文件算法
allprojects { // ...... // 其餘配置 // ...... project.ext { // ...... defaultMinSdkVersion=16 // 將此處的值改成 16 //...... } }
cordova build android
error: resource android:attr/fontVariationSettings not found. error: resource android:attr/ttcIndex not found.
修改Cordova項目platforms\android中的build.gradle文件,在末尾添加
configurations.all { resolutionStrategy { force 'com.android.support:support-v4:27.1.0' } }
修改Cordova項目platforms\android\app中的build.gradle文件,在末尾添加
configurations.all { resolutionStrategy { force 'com.android.support:support-v4:27.1.0' } }
cordova build android
編譯成功Mismatch of CPU Architecture The Crosswalk Project Service must be updated to match the CPU architecture of the device. Please install it from the app store, then restart app HelloWorld.
修改Cordova項目platforms\android\app中的build.gradle文件
android { productFlavors { // ...... // 其餘配置 // ...... // 添加代碼(若已存在則忽略) start armv7 { ndk { abiFilters = ["armeabi-v7a"] } } x86 { ndk { abiFilters = ["x86"] } } // 添加代碼 end } }
cordova build android
時忽然就報錯了FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:transformClassesWithDexBuilderForArmeabiDebug'. > com.android.build.api.transform.TransformException: java.lang.IllegalStateException: Dex archives: setting .DEX extension only for .CLASS files ......
cordova clean
而後從新編譯問題解決,2019-11-17記錄