Delphi」カテゴリーアーカイブ

Delphiでマルチプラットフォームを使って、Androidアプリの作成

新年そうそうはまってしまいました。

Windows専用に作っていた教育用ドリルソフト(CAIMST)、もともとは<垂>さんがDOSで作っていた物を、私が引き継いで、Windows版を、Delphi 3.1で作成したのが最初です。
これをAndroidでも動作させたい、また少しバージョンアップしたいと思い、とりあえず、まずは実際にコンパイルできるかどうかのテストもしたかった。

  • Windows用のアイコンからアイコン畑を使って、各大きさのものを作成。Android用にpngに変更。
  • マルチアプリケーションの新規作成します。
  • Optionで、アイコン、コンパイル関係フォルダを登録
  • Optionで、バージョン情報を登録
  • 簡単な枠だけ作ってとりあえず、コンパイル

で、もちろん、Windows版は問題無くコンパイル完了。
メインコンピュータに接続したAndroidは、DignoDual2(4.2.2)、NEXUS5X(6.0.1)で、2つともDelphiのプロジェクトマネージャーのAndroidのターゲットには問題無く表示されている。
次に、ターゲットをAndroidでコンパイル。何と、Failure[INSTALL_FAILED_INVALID_APK]とプロセスを生成できませんとのこと。

ここからが長かった。まずは、Delphiのヘルプを確認、また、スマートフォンとの接続がうまくいっていないのではないかと思い、USBドライバの確認や、スマートフォン側の設定の確認、そしてサイトでの検索確認。再度、Android SDKの設定が悪いのかと再度チェック。
しかし、どうしてもわからない。

もう一度、初心に戻って、マルチアプリケーションを新規作成した状態で、何も触らずに、コンパイル。
すると、何と、全く問題無くコンパイル完了。あれれれ….

とすると、ハードウェア的な問題ではなく、上で箇条書きにした部分での問題ということがここでやっとわかった。

結局、添付画像のバージョン情報の[package]の内容が悪かったことがわかった。
Delphiのhelpの説明では、一意となるユニークな名前ということだったので、自分のソフト名だけにしたのだが、これが間違いだった。確かに、デフォルトは、com.embacadero.$(ModuleName)という感じだった。ここで、おかしいなと思ったらよかったのだけど、初めてのことだったので、さっさとcom.embacaderoを消したのがわるかった。
いろいろと調べてみると、Androidの世界で一意にならないといけないので、最初に自分の所有ドメインが1番いいのだとか。つまり、パッケージをインストールするためには、ドメイン風のpackage名になってないといけないらしい。

で、jp.yoriki.$(ModuleName)とすることによって無事に解決。

今日、1日、これだけで終わってしまった。

delphi, option

delphi, option

Delphiで、サロゲート文字とIVSに対応

仕事で、名前を登録して使用するプログラムを作って使っています。

今までは、unicodeのBMPだけを使用してそれ以外は、外字で対処していたんですが、最近、サロゲート文字やIVSというものがあることに遅ればせながら気がつきました。昨年末に仕事場のパソコンがWindows8.1になってから、このことに気がつき、辻の1点しんにょうと2点しんにょうの2つをかき分けることが可能となりました。

しかし、私の自作のプログラムは、これに対応していず、基底文字の後に??がつくという不具合がでてしまいました。これは、length, copy 関数が正常に動作していないことに原因があることがわかったので、早速、インターネットでサロゲートとIVSについて検索してみましたが、深みにはまってしまいました。そして、何とか、関数を作り上げたものの、さらに結合文字というものがあることに気がつき、挫折と妥協をしかけましたが、エンバカエロのサイトにサンプルコードがあり、これを拝借することにより、ほぼ思う通りの動作が可能になりました。

続きを読む