Category Archives: Android

Android

自作アプリが「このアイテムはお使いの端末に対応していません。」と表示されて超あせった話

Published by:

開発者用コンソール画面

Android用パズルゲームアプリの「リアル上海」を開発、公開していますが、先日バージョンアップした後から、自分が普段から使っているタブレット(Motorola社製のXoom。Android4.0)でアプリのページを開くと、「このアイテムはお使いの端末に対応していません。」と表示されて?!?!?!状態になりました。

開発用スマホ(IS03。Android2.3)では問題なく、ほかの公開アプリ「リアル四川省」でも問題なし。
もちろんXoomでも、以前のバージョンではこんなことありませんでした。

バージョンアップの際にAndroidManifest.xmlを修正したのはバージョン情報のところだけで、追加のパーミッションやSDKバージョンの変更なども行っていません。

エラーメッセージである「このアイテムはお使いの端末に対応していません。」で検索しても、root化したデバイスでアプリがインストールできませんとかのユーザーサイドのトラブルだけで、開発者サイドの情報は何もなし。

一つ怪しいとにらんだのは、Google playのDeveloper Console(開発者用の公開設定画面)にて、7インチタブレット&10インチタブレット向けにスクリーンショットの画像を追加したこと。
これまでこの設定オプションは無かったのですが、「あ、こんなの登録できるようになったんだ」と軽い気持ちでスクリーンショットをそれぞれ何枚かずつアップロードしていました。

開発者用コンソール画面

開発者用コンソール画面

試しに、これらの画像をすべて削除して様子を見ていたのですが、結局Xoomで表示されるエラーメッセージは変わりありませんでした。

涙目でAndroidManifest.xmlを眺めていて、ふと思いつき、エラーメッセージを英語に置き換えてググってみたら、stackoverflowで同じトラブルで困っている人見つけたー!

Android Market: “This item is not compatible with your device.”
This is really getting on my nerves. I have tried like everything to get my App to work on some more exotic tabs!

解決策として挙げられていたものの中に見つけた、「<supports-screens … android:xlargeScreens=”true”/>」をAndroidManifest.xmlで指定するという方法。
自分のAndroidManifest.xmlを改めてみてみると、そもそもsupports-screens要素を記述していませんでした。
さっそく下記のタグを追加して、新しいAPKファイルをアップロードしたら・・・

解決した――――!

解決した――――!

aaptコマンドなどでも確認したのですが、supports-screens要素を指定しない場合、「android:xlargeScreens=”false”」指定と同じ扱いになるのですね。
Xoomは10インチタブレットなので、xlargeサイズ扱いとなり、対象外になってしまったと。

これまでずっと問題なかったのに突然使えなくなったのは、やはり10インチタブレット向けのスクリーンショット画像を追加したことがトリガーになったのだと思われます。

丸一日10インチタブレット向けには販売できなかったのは残念ですが、あー良かったー!

Android プログラミング

Nexus7用エミュレータが起動しない、「Unfortunately, Launcher has stopped.」の直し方

Published by:

Android爆速エミュレータ環境の作り方」を参考にして、Intel CPU版の快速Nexus7用エミュレータ環境を作れたのですが、たまにエミュレータが起動しなかったり、ランチャー(アプリ一覧)を開くと「Unfortunately, Launcher has stopped.」のメッセージが出て操作できなくなることがあります。

そんな時は、「C:/Users/<ユーザー名>/.android/avd/<AVD名>.avd/config.ini」を次のように修正すると直りますよ!

config.ini

hw.ramSize=1024MB ← 「hw.ramSize=1024」に「MB」をつける。
vm.heapSize=64MB ← 「vm.heapSize=32」とかになってたら増やしてあげる。

Android 発表、ニュース

裏技公開中!Androidアプリ 『リアル上海』

Published by:

透明牌をちょこっと公開中

思っていた以上に好評のAndroidアプリ『リアル四川省』に背中を押されるように、
新作アプリ『リアル上海』をリリースしました!

四川省史上最も難しい?!Androidアプリ『リアル四川省』

↑リリース日、内容ともに兄貴分のリアル四川省についてはこちら

兄貴分の『リアル四川省』をリリースして1年経ちましたが、まず大きな違いは弟分『リアル上海』アプリ購入のキャンセル率が低い!
上海を期待して『リアル四川省』を購入される方がいるんですよね。きっと。
で、開いてみてなんじゃこれ!となったのでしょうけど、これからはそんな間違いをせずに『リアル上海』をダウンロードしてくださいね。

そんなことはさておき、3つの裏技を大公開~~~

【裏技その1 ・・・ 透明牌の追加】

まあこれは裏技ではないですが、全100面をクリアすると、通常選択できない「透明牌」を設定で選べるようになります。

透明牌をちょこっと公開中

透明牌をちょこっと公開中

数ある上海アプリの中でも、ある意味タブーの透明牌を搭載しているのは、「リアル上海」だけではないでしょうかっ!!(未調査)
最初は開発中のバグがきっかけだったのですが、面白いので全面クリアのボーナスとして採用することにしました。

下に隠れている牌が見えるので、手詰まり率が減る・・・かもしれません。
実際のところ、気にしすぎるとタイムもスコアも伸びません(笑)

【裏技その2 ・・・ 牌の同時押し】

スマホユーザーの方には難しいかもしれませんが、タブレットで遊んでいる方は、ぜひ両手を使ってプレイしてください。
二つの同じ絵柄の牌を選択する際、同時にタッチしてもちゃんと消すことができます。
意外に他の上海アプリではこの同時押しが出来ないようになっています。

同時押しをすることで、もちろんクリアタイムの短縮にもつながるのですが、
それ以上に同時押しは楽しい!
特に、少ない牌の面で同時押しでどんどん牌をとっていくと、
アニメーションとあいまってすごく気持ちいい!です。

近々アプリのプレイ動画をアップする予定ですが、そこではもちろん同時押しを披露したいと思います。

【裏技その3 ・・・ 連続取りでスコアアップ】

『リアル上海』には、兄貴分の『リアル四川省』にはない、スコアという概念があります。
クリアタイムももちろんランキングに登録されるのですが、スコアが高い方がランキングでは上になります。

このスコアというのは、牌をとる時間の間隔が短くなるほど高い点数が付くようになっています。
表にまとめると、このようになります。

時間の間隔 点数
0.3秒以内 20点
0.6秒以内 10点
1秒以内 5点
3秒以内 2点
それ以上 1点

なので、一つ取って考えて、また一つ取って考えてというスタイルではなく、
3手、4手先まで考えておいてから一気に取った方が、スコアが断然高くなります。
少なくとも2手先までは決めておいてから、同時押しでトントントーンと取ってください!

もう少し詳しい情報を欲しい方や、他のスクリーンショットを見たい方は、「Lucプログラム&デザイン リアル上海 – Androidアプリ」へ、
すぐに遊びたい!という方は「Google play リアル上海」へGO!


他にもこんな機能が欲しいよーという人は、smilkobuta@gmail.comまでお気軽にご連絡くださいね。

Android 発表、ニュース

子どもの証明写真

Published by:

iD Shoot

以前、1歳の子どものパスポートを作るとき、デジカメで撮った写真をトリミングして作ったことがあります。
写真をパスポートサイズにトリミングするブラウザツールを作って、無事パスポート用の証明写真を作ることができました。
パスポートの申請もばっちりOKでした。

その後、そのWebツールを使いやすくして公開しようと思っていたのですが、ずるずると3年間もほったらかしにしたままにしてました(子どもも4歳に)。

そのWebツールはインターネットのどこかで、風に吹かれて転がっているかもしれませんが、
それはなかったことにしてAndroidアプリとして作り直しました!

iD Shoot

Androidアプリ「iD Shoot – 証明写真」


99円の有料アプリです

Webツールはタダで公開しようと思っていたのでAndroidアプリもタダでいいじゃないかという気もしますが、Androidスマホって色々種類が多すぎて、すべての機種できちんと動かすのは難しいんですよ!
特にカメラアプリは鬼門のようで、試した機種ほとんどすべてで新たな問題が発生するという・・・
なので、今後もメンテナンスをし続けますという意思表示として、99円の有料アプリにしました。

自分の機種で動かない!というかたは、お気軽にご連絡ください。(smilkobuta@gmail.com)

ブラウザツールと違って、スマホやタブレットには最初からカメラが内蔵されていますので、Webツール版よりも一貫性が出た気がします。
それに合わせて、ウィザード形式(流れ作業方式)で証明写真を作成できるようにしました。

プリントについて

もちろん自宅のプリンターや近所のコンビニ、DTPショップ、ネット依頼できる5円プリントなどで、印刷がちゃんとできるのかテストしたのですが、意外に差があるものですね。

一番きれいに印刷できたのが、近所のスーパーの中に入っていたDTPショップ
色合いやサイズもばっちり印刷できました。

次によかったのが、ネット依頼できる「5円プリント」というサービス。
Androidアプリから印刷を依頼できますので、お手軽なうえにプリントもいい感じでした。
色合いは気持ち明るめになってしまいましたが、サイズはここが一番ぴったりでした。

残念だったのがコンビニのカラープリントで、画質も荒く、写真のサイズは数ミリ大きく印刷されてしまいました。
パスポートの写真はすごく規定がうるさく、45mmx35mmという全体の大きさだけではなく、頭の大きさや位置もミリ単位で指定がありますので、この数ミリの違いは大きい・・・
ネット注文できるアプリもあって、便利でよいのですが、公的書類に添付する写真としては選ばないほうが無難です。

DTPショップなどで注文するときは、「証明写真なので、リサイズやトリミングなしでお願いします」と伝えた方が安心かもしれません。

テストプリント写真の山

テストプリント写真の山



まあこれで、証明写真ボックスの700円を払わずに済むようになったので、自分的には満足です。
もう少ししたら子どものパスポートも期限が切れるので、その時はこのアプリで撮ろうっと 🙂

iD Shoot
ダウンロード

Android

AndroidのSpinner用Key-Value簡易アダプター

Published by:

Androidのアプリを作っていて、単純な「キー=値」構造のプルダウンメニューを一つ作ろうとすると、その都度 XXXAdapter extends ArrayAdapter<String> を作るハメになります。
毎回面倒ですので、どんなオブジェクトでも簡単にSpinner化できるようなKeyValueAdapterクラス+KeyValueItemインターフェースを作りました。
HTMLの<select>タグのような感じで使えますよ。

■サンプル:MyObjectクラス
package com.lumiere_couleur.android;
 
public class MyObject implements KeyValueItem {
    private int id;
    private String name;
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    @Override
    public long getOptionValue() {
        return id;
    }
 
    @Override
    public String getOptionLabel() {
        return name;
    }

}

■KeyValueItemインターフェース
package com.lumiere_couleur.android;
 
public interface KeyValueItem {
    // 選択肢の値
    public long getOptionValue();
 
    // 選択肢の表示文字列
    public String getOptionLabel();
}

■KeyValueAdapterクラス
package com.lumiere_couleur.android;
 
import java.util.List;
 
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
 
public class KeyValueAdapter extends ArrayAdapter<String> {
 
    private List<? extends KeyValueItem> items;
 
    /**
     * コンストラクタ
     *
     * @param context
     * @param resourceId
     * @param items
     */
    public KeyValueAdapter(Context context, int resourceId,
            List<? extends KeyValueItem> items) {
        super(context, resourceId);
        this.context = context;
        this.items = items;
    }
 
    public int getCount() {
        return items.size();
    }
 
    public String getItem(int position) {
        return items.get(position).getOptionLabel();
    }
 
    public long getItemId(int position) {
        return items.get(position).getOptionValue();
    }
 
    public int getPosition(long itemId) {
        for (int i = 0; i < items.size(); i++) {
            if (items.get(i).getOptionValue() == itemId) {
                return i;
            }
        }
        return 0;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView label = new TextView(context);
        label.setTextColor(Color.BLACK);
        label.setText(items.get(position).getOptionLabel());
        return label;
    }
}

これでアダプターの量産から逃れられます。