物語の始まり
cocos2dで書かれたプロジェクトが修正のために来ました。 パズルを集めて言葉を学ぶ必要がある子供向けのゲーム。 仕事は仕事に似ていますが、主な問題は、私の前にインドの特定の少女がプロジェクトに取り組んだことです。 そして、とても楽しい期間を始めました。 私が見なければならなかったもの、何をすべきか、そしてそれがすべて終わった方法の例は、カットの下にあります。
ただし、この投稿は、私が修正しなければならなかったエラーに関するものではなく、まったく別の問題に関するものです。
プロジェクトでの数か月の作業の後、主な問題が解決されたときに、顧客からAndroidデバイス用のビルドをビルドするように依頼されました。 その後、最初の開発者がcocos2d-x用に記述することになっていたことについて驚くべき会話があり、アプリケーションはどのデバイスでも簡単に実行できるはずです。 私はすでに問題を解決しなければならず、私の選択はApportableにかかっていました。
実際にトピック
公式ウェブサイトによると、Apportable SDKはiOSおよびAndroidデバイスで同じxCodeプロジェクトを実行できるシステムです。 まず第一に、これはcocos2dで書かれたゲームに適用されます。 一部のコアシステムフレームワークの移植には問題があります。
このゲームは実質的に純粋なココナッツで書かれており、UIKit要素は2か所でしか使用されていません。
じゃあ 始めましょう。
最初に行うことは、MacにSDKをインストールすることです。 これを行うには、サイトの指示に従って、ターミナルに入力するだけです
(echo; echo PATH=~/.apportable/SDK/bin:$PATH) >> ~/.bash_profile; source ~/.bash_profile
SDKには約2GBの空きディスク容量とxCode 5のインストールが必要です。
これらすべてがダウンロードされている間に、必要なコードをプロジェクトに追加できます。
最初に、画面エミュレーションモードを設定します。 いくつかのオプションがあります。
例:
UIScreenIPhone3GEmulationMode-アプリケーションがRetinaデバイスのグラフィックをサポートしていない場合に使用されます。 仮想画面のサイズは320px / 480px、スケール-1.0です
UIScreenScaledAspectFitEmulationMode-Androidデバイスの画面サイズに応じてアプリケーションを拡大します。 Retinaグラフィックを使用しません。
UIScreenBestEmulatedMode-Androidデバイスの画面サイズに応じてアプリケーションを拡大します。 最も適切なグラフィックを使用します。 このモードが正しく機能するためには、すべてのiPhoneおよびiPadの画面にグラフィックが必要です。 そうでない場合、最適に表示されない場合があります。
int main(int argc, char *argv[]) { @autoreleasepool { #ifdef ANDROID [UIScreen mainScreen].currentMode = [UIScreenMode emulatedMode:UIScreenAspectFitEmulationMode]; #endif int retVal = UIApplicationMain(argc, argv, nil, @"AppController"); return retVal; } }
すべてのオプション typedef NS_ENUM(NSUInteger, UIScreenEmulationMode) { UIScreenIPhone3GEmulationMode, UIScreenIPhone4EmulationMode, UIScreenIPhone5EmulationMode, UIScreenIPadEmulationMode, UIScreenIPadRetinaEmulationMode, UIScreenAspectFitEmulationMode, UIScreenScaledAspectFitEmulationMode, UIScreenBestEmulationMode, UIScreenBestEmulatedMode = UIScreenBestEmulationMode, UIScreenNativeMode, UIScreenNativeRetinaMode, UIScreenBestNativeMode, };
次にやり直さなければならなかったのは、要素の位置です。
[item setPosition:ccp(400, 600)];
に
[item setPosition:ccp(puzzle.contentSize.width * 0.2, puzzle.contentSize.height * 0.772)];
クリックを追跡する場合も同じです。
その後、ターミナルのプロジェクトフォルダーに移動して、次のように入力します。
apportable load
このコマンドはapkファイルを作成し、接続されたデバイスにダウンロードし、インストールして実行します。 理想的です。 常に起こるとは限りません。 ファイルリンクエラーは考慮しません。それらは非常に個別のエラーです。 ただし、apportableが特定のデバイスを認識しない場合があります。 アプリケーションをテストした7つのデバイスのオフィスでは、3にインストールできませんでした。
この場合の対処方法 すべてが非常に簡単です。 Apportableはまずapkファイルを作成してから、それをデバイスにダウンロードしようとします。 したがって、このファイルはどこかにあります。 より正確には、ここ:
/Users/username/.apportable/SDK/Build/android-armeabi-debug/ProjectName
apkファイルはこのフォルダーにあり、デバイスに転送してインストールするだけです。 このために、Android File Transferアプリケーションを使用しました(箱から出してすぐのポピーでは、Androidデバイスのメモリにアクセスできません)。
それだけですか? 利益? 残念ながらいいえ。
カメラに問題があります。 カメラが呼び出されて写真を撮りましたが、確認ボタンが押されると、アプリケーションがクラッシュしました。 問題はグーグルではなく、大きな問題をもたらすと約束されていましたが、... Androidの開発者からヘルプが寄せられました。 マニフェストと権限が何であるかを見つけました。
これは何? iOS開発者向けinfo.plistの類似物。 マニフェストには、基本設定、すべての権限および構成が含まれています。
など。 apportableを使用してビルドを作成した後、ProjectName.aprojフォルダーがプロジェクトディレクトリに表示されました。 このフォルダーには、構成ファイルとコンパイルされていないファイル(リソースなど)が含まれています。
configuration.jsonファイルに興味があります。 その中で、Androidのプロジェクトコンパイル設定を変更できます。 たとえば、許可を追加します。 カメラには書き込み権限が必要です。
そして、行を変更します
"FEATURES": ["opengles2","landscape"]
に
"FEATURES": ["opengles2","landscape","write_external_storage"]
魔法のように問題を解決しました。
デバイス画面上のアプリケーション名のローカライズには微妙な違いもあります。 各言語について、
strings.xmlファイルを追加し、ProjectName / java / res / values- [lang_description]フォルダーに入れます
strings.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Localization name</string> </resources>
そしてconfiguration.jsonに追加します:
最後のいくつかのポイント:
- Androidデバイスには多くのスクリーンラックがあり、いくつかの場所では次のインサートを使用する必要がありました。
非表示のテキスト #ifdef ANDROID CGRect frame = [UIScreen mainScreen].applicationFrame;//1.7031 - pad 1.778 - phone CGFloat ratio = frame.size.height / frame.size.width; if (ratio < 1.72) { x = 16; } else{ x = 29; } #endif
- 「portrait」フラグがconfiguration.jsonファイルになく、プロジェクトのxCode設定のDevice Orientationに「Portrait」の横にチェックマークがある場合、縦向きがサポートされます。 注意してください。
- docs.apportable.comの公式ドキュメント
- Apportableは多くのシステムフレームワークを追加しました。 公式文書にはこれに関する情報はほとんど含まれていません。 Androidで使用可能な新しいメソッドを含む新しい.hファイルは、フォルダーで表示できます。
/Users/username/.apportable/SDK/sysroot/System/Library