顯示具有 Android 標籤的文章。 顯示所有文章
顯示具有 Android 標籤的文章。 顯示所有文章

2013-02-15

PhoneGap 在 Android 平台的第一步

PhoneGap 被 Adobe 買下來之後, 核心的部份捐給了 Apache, 目前為 Apache Cordova 專案。以下為使用 PhoneGap 開發 Android App 的初步設定:

1. Eclipse ( 目前為 4.2 ) 開發環境要先裝好 Android SDK, Android ADT plugin ( Android SDK Manager, Android Virtual Device Manager )。

2. 下載 PhoneGap ( Cordova 目前為 2.4 ), 並解壓縮檔案。

3. 建立 Android Application Project, 設定專案名稱為 Phonegap-hellohell 。標的版本設為 Android 4.1, 官方的範例可以使用 Android 2.1 以上。

4. 將 Phonegap 解壓縮後, 複製 phonegap-2.4.0\lib\android 裡的 cordova-2.4.0.jar 到  Phonegap-hellohell 專案的 libs 目錄內。複製後, 右擊  libs/cordova-2.4.0.jar , 點選 Build Path → Add to Build Path。

5. 複製 phonegap-2.4.0\lib\android\xml 目錄 ( 裡面只有一個 config.xml 檔案 ) 到  Phonegap-hellohell 專案的 res 目錄內。

6. 在 Phonegap-hellohell 專案的 assets 目錄裡建立 www 目錄, 並複製 phonegap-2.4.0\lib\android 裡的 cordova-2.4.0.js 到此目錄, 往後所有 HTML 相關的檔案都放在此目錄內。

2012-07-18

AIR native extension for android (Java)

官方的教學文件裡有一篇 Developing native extensions for Adobe AIR, 裡面的教學算很詳盡, 但有些細節不太正確, 以下是個人初次試做的心得。

官方建議在 Flash Builder 4.6 上安裝 Android Developer Tools 並直接在上面開 3 個 projects: Android Application Project, Flex Library Project 和 Flex Mobile Project。
在 Flash Builder 開 Android Application Project 遇到的狀況:
1. 以系統管理員身分執行 Flash Builder 才能安裝 plug-in。
2. 只能安裝 Android Developer Tools, 無法安裝 Android NDK plugins (問題不明)。
3. 撰寫時要切換到 Java perspective (個人在 Flash Builder 上開 Android Application Project 有莫名的排斥 XD )。

個人是在 Eclipse 上做 Android Application Project 開發:
1. 建立專案時選 Android Application Project。
2. 取消勾選 "Create custom launcher icon", 勾選 "Make this project as a library"。
3. 選 BlankActivity ( Create Activity 應該可以取消)。
4. 將 FlashRuntimeExtensions.jar 加到 libraries 裡 ( 此 jar 位於 AIR SDK 的目錄裡, 如 C:\air_sdk_33\lib\android ) 。
5. 依劇規則撰寫類別檔之後, 我們要的 jar 檔會在 /bin 目錄裡自動生成。

Flex Library Project:
1. 在 Flash Builder 上建立 Flex Library Project。
2. 依規則撰寫類別檔之後, 我們要的 swc 檔會在 /bin 裡。
3. 如官方教學, 在專案的 /src 裡新增一個 extension.xml。例如:
<extension xmlns="http://ns.adobe.com/air/extension/3.1">
  <id>com.riarock.string</id>
  <versionNumber>1</versionNumber>
    <platforms>
      <platform name="Android-ARM">
        <applicationDeployment> 
          <nativeLibrary>shinderstringnative.jar</nativeLibrary>
          <initializer>com.riarock.shinderstringnative.extensions.ShinderStringExtension</initializer> 
      </applicationDeployment> 
    </platform>
  </platforms>
</extension>

打包成 .ane :
1. 將 Android Application Project 裡生成的 jar 檔, 放到專案的 /bin/native 目錄內。
2. 將 Flex Library Project 裡生成的 swc 檔解壓縮 (swc 其實也是 zip 格式), 將 library.swf 放到上一步的 /bin/native 目錄內 (避免打包時, 找不到 library.swf 的錯誤, 理論上打包時應該要自動解壓縮並放到 ane 檔裡才是)。
3. 如官方教學, 在 Flex Library Project 專案的 /src 內新增一個批次檔 package.bat (windows):
set adt_directory=C:\air_sdk_33\bin
set library_directory=C:\Users\shinder\Adobe Flash Builder 4.6\StringANEConnector
set native_directory=C:\Users\shinder\workspace\ShinderStringNative\bin\native

set signing_options=-storetype pkcs12 -keystore "C:\Users\shinder\Desktop\mycert_shinderlin_123456.p12"
set dest_ANE=ShinderString.ane
set extension_XML=%library_directory%\src\extension.xml
set library_SWC=%library_directory%\bin\StringANEConnector.swc

"%adt_directory%"\adt -package -tsa none %signing_options% -target ane "%dest_ANE%" "%extension_XML%" -swc "%library_SWC%" -platform Android-ARM -C "%native_directory%" .
4. 在 命令列中執行  package.bat, 就可以在相同的目錄看到 ane 檔了。
5. -tsa none 的參數可以避免打包時 "Could not generate timestamp" 的錯誤。

測試功能的專案:
1. 在 Flash Builder 上建立 Flex Mobile Project。
2. 在 Properties > Flex Build Path > Native Extensions 加入 ane 檔。
3. 在 Properties > Flex Build Packaging > Google Android > Native Extensions, 勾選 ANE 項目裡的 Package (就是發佈時要包含 ane 檔的內容)。
4. 按 Export Release Build 就可以生成 apk 檔了。

註1: jar, swc, apk 都是 zip 格式, 就可以用 7-zip 之類的工具就查看打包的內容。
註2: Permissions 應該是在 Flex Mobile Project 上設定, 而不是在 Android Application Project 上設定。

FB 留言