2015年8月26日 星期三

安裝 cordova

如果想要快速上手 cordova 的話, 建議 用現成的 docker 來學 cordova。 這一篇筆記 「苦行僧自力救濟、不靠 docker」 的過程。 本文在 lubuntu 15.04 上, 全程以 root 操作。

  1. 按照 webupd8 的文章, 安裝 oracle java 8。 [過程中必須同意 Oracle 的非自由授權]
  2. 安裝 google 的 android sdk: 從 這裡 找到 「SDK Tools Only」 底下的 android-sdk_r*-linux.tgz、 解壓縮、 搬到某個你高興的目錄 (比方說 /opt/android/sdk 好了)。
  3. 安裝 android sdk 的外掛: 執行 /opt/android/sdk/tools/android 挑幾個外掛來安裝。 我沒有要用 google 的開發環境、 也沒想要用最新的版本, 所以我把最新版 (5.* 或 6.*) 的勾取消掉。 [注意: 但是 Android 5.1.1 (API 22) 似乎 必裝。 詳見留言一] 又根據 統計表 挑選目前可以照顧最多用戶的 4.1.x (API 16) 跟 4.4 (API 19) 而且只勾各版本的 「SDK Platform」 其他什麼 System Image 碗糕都不需要。 (因為我用 android-x86 模擬器 來測試除錯。)
  4. 在 .bashrc 裡面加上一句: export ANDROID_HOME=/opt/android/sdk。 登出再登入。
  5. 安裝 npm: apt-get install npm 還要小修正一下: cd /usr/bin ; ln -s nodejs node
  6. 安裝 cordova: npm install -g cordova
  7. 如果你的 linux 是 32 bit 的, 那麼現在就可以使用 cordova 指令了; 如果是 64 bit 的系統, 編譯時可能會出錯, 因為 android sdk 是 32 bit 的。 這時需要:
    dpkg --add-architecture i386
    apt-get update
    apt-get install libstdc++6:i386 lib32z1
    
    詳見 這個問答

上一篇使用 docker 快速上手當中, 編譯加測試需要三步:

cordova build
#############
adb install ...
adb shell am start ...

前一步在 guest OS 裡面做; 後兩步在 host OS 裡面做。 現在既然所有軟體全部都裝在同一部實體機上, 上述三步可以合併成一步: cordova run android, 它會自動編譯、 安裝、 (在 android-x86 或實體手機/平板上) 執行。

1 則留言:

  1. 今天在另一部電腦安裝 android sdk。下 cordova build 指令時出現這個錯誤:
    [Error: Please install Android target: "android-22".

    Hint: Open the SDK manager by running: /.../sdk/tools/android
    You will require:
    1. "SDK Platform" for android-22
    2. "Android SDK Platform-tools (latest)
    3. "Android SDK Build-tools" (latest)]

    明明我在 config.xml 裡面把 android-minSdkVersion 跟 android-targetSdkVersion 都已經設定成 16, 而且 cordova platform add android 之後所產生的 platforms/platforms.json 內容正確 ( { "android": "4.1.1" } ) 還有 platforms/android/AndroidManifest.xml 的內容也正確 (
    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="16" />) 但是不知為什麼 android sdk 就是堅持要叫我安裝 API 22。

    好吧, 所以只好再叫出 SDK manager, 安裝 Android 5.1.1 (API 22) 底下的 SDK Platform, 然後編譯就成功了。

    回覆刪除