ラベル 開発 の投稿を表示しています。 すべての投稿を表示
ラベル 開発 の投稿を表示しています。 すべての投稿を表示

2014年6月7日土曜日

Windows7 バッチファイルが起動しない?!

BATファイルのショートカットをデスクトップに作成し、
起動すると、
エラーが表示され終了する。

DOSのコマンドプロンプトでは、実行可能。

【原因】
標準ユーザだったため。
Windows7からセキュリティ強化されたらしい。

【対策】
管理者権限で実行する。
(BATファイルを選択し、右クリック→管理者権限で実行)

ショートカットの場合、
 ショートカットを選択、右クリック→プロパティ
 ショートカットのタブを選択、詳細設定ボタンを押下
 「管理者として実行」にチェックを入れる。

  


2014年1月19日日曜日

Android エミュレータ(AVD)高速化

AndroidSDKに標準でついているエミュレータは、ARM CPUをエミュレートした上でDalvikVMが動いているから、非常に重いです。

実は、SDK R17以上、APIレベル15(Android4.0.3)以上から、
Intel86系CPUをエミュレートした機能も提供されています。

ただし、仮想化機能(Intel VT )を利用しているので、x86互換CPUでは動きません。
また、デフォルトではIntel VTを無効にしているマシンもあるので、その場合は、
BIOS 設定でIntel VT を有効にする必要があります。

【方法】 (Windows7の場合)
1.Android SDK Managerを起動し、以下の2つを選択し「Install」ボタンを押す

 ・Intel x86 Atom System Image
  AndroidのSDKの下にある。ダウンロード後インストールされる。
 ・Intel x86 Emulator Accelerator (HAXM)
 Extras の下にある。こちらはダウンロード後自動インストールされないので、
 次に手動インストールする。

2.Intel x86 Atom System Imageを手動インストールする
  Android SDKインストールフォルダの下の
extras\intel\android-sdkextrasintelHardware_Accelerated_Execution_Manager
の下にある、

「IntelHaxm.exe」ファイルを実行する

3.AVD作成画面で、

 CPU/ABIで、「Intel Atom (x86)」を指定する。

 Use Host GPUをON にすると画面描画が更に高速化されるが、
 スナップショット保存はサポートされなくなる。

その他、NDK(ネイティブコード)を使う時に注意が必要。
ちなみに、Windows8.1ではインストールはできたが、AVDが正しく動かなかった。

本家ソース元

参考にした日本語サイト

(追記)
Use Host GPUをON にすると、動作が不安定になる場合があった(マルチディスプレイ?)

2014年1月7日火曜日

Eclipse エクスポート ファイル・システムと同期がとれていません

Androidのプロジェクトをエクスポートしようとしたら、
「エクスポート中に問題が見つかりました」とエラー表示された。
詳細ボタンを押すと、

「エクスポート中に問題が見つかりました:
  XXXXXXXXX のエクスポート・エラー:
リソース 'XXXXXXXXX' はファイル・システムと同期がとれていません。」

とのこと。
そういうときは、

該当プロジェクトを選択し、
メニュー「プロジェクト」 -> 「クリーン」

でOK

2013年11月25日月曜日

Androidアプリ 実行時にClassNotFoundException発生!?

Androidアプリを実行したら、以下のようなエラーが出た。

10-30 22:55:51.304: E/AndroidRuntime(791): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{パッケージ名/パッケージ名.Activity名}: java.lang.ClassNotFoundException: Didn't find class "パッケージ名.Activity名" on path: DexPathList[[zip file "/data/app/パッケージ名.Activity名-1.apk"],nativeLibraryDirectories=[/data/app-lib/パッケージ名.Activity名-1, /system/lib]]
10-30 22:55:51.304: E/AndroidRuntime(791): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)

java.lang.ClassNotFoundExceptionは「Javaのクラスファイルが見つからない」ということ

【原因その1】
AndroidManifest.xmlで定義しているActivityの名前と、Javaソースのクラス名が一致しない。
(今回はこれ↑でした。よ~~く見たら、一字違ってた(^^;;;)

ちなみに、Activityの定義そのものがない場合は、ActivityNotFoundExceprionになる。

【原因その2】
Android Private Libraries をエクスポートしていない。
詳細はコチラ↓
http://android.keicode.com/devenv/class-not-found.php

2013年11月13日水曜日

Windows7 標準ユーザでユーザ環境変数を設定するには

よく知られている環境変数の設定方法は、
システムの詳細設定から行う方法


しかし、この方法だと、標準ユーザの場合、
管理者としてのログインが求められ、それでログインできても
システム環境変数の変更はできてもユーザ環境変数は変更できない。

ユーザ環境変数の変更方法

(1)コントロールパネル -> ユーザアカウント で、

左のコントロールパネルホームのメニュー一覧の
「環境変数の変更」を選択する

(2)Windowsキー押下の「プログラムとファイルの検索」で、
(または、Windowsキー+Rでコマンド入力)

「env」と入力する

2013年10月10日木曜日

AIR インストーラーが正しく構成されていないのでアプリケーションをインストールできませんでした

ある日、昔作ったAdobe AIRアプリがインストールできない、と電話があった。

社内で時々利用されているのだが、ひさしぶりにインストールしようとしたら、

「インストーラーが正しく構成されていないのでアプリケーションをインストールできませんでした。アプリケーションの作成者にお問い合わせください。」

とのこと。

AIRランタイムを以前の(正常に動いていた)ものに変えみても一緒だったそう。

早速試してみると、確かにエラーが表示されインストールできない。
う~~ん、、、、。

原因は、証明書の期限切れだった。
ADTの自己署名入り証明書を使用して、AIRインストールファイルを作ったのだが、
その有効期限が5年だったのだ。

もう5年もたったのか、、、、。
再度作り直して、解決(^^;;

2013年8月30日金曜日

Android エミュレータ起動でタイムアウトが発生

WindowsのAndroid開発環境でマシンの実装メモリが少ないと、
エミュレータ起動時(あるいは、エミュレータでのAP起動時)に、
タイムアウトが発生することがある。

(対処方法その1)タイムアウト値を長くする。

  (1)メニューの【ウィンドウ】→【設定】で、設定ダイアログを表示
  (2)左の一覧から【Android】→【DDMS】を選択し、右に表示された
   「ADB接続タイムアウト」の値を増やす。

(対処法その2)AVD(Android Virtual Devices)の使用メモリを減らす。

  (1)メモリー・オプションのRAMとVMヒープの値を減らす。
   (参考 ターゲットAndroid2.2で、 RAM:256 VM:24 にした)
  (2)SDカードのサイズを最小の9(MB)にする。
   (3)エミュレーションオプションのスナップショットのチェックなし(デフォルト)
   (参考)スナップショットをチェックすると、エミュレータ終了時のイメージを保存し、
   それを使い起動するので起動が早くなる。が、リソースを使う。

   など、調整してみてください。
   

2013年7月24日水曜日

Windows7 ライセンス猶予期間を延長する方法

Windowsはライセンス認証の猶予期間(30日)以内であれば、ライセンス認証をしなくても使える。
その猶予期間をリセットすることで延長して使える方法(ただし最大3回まで)

①猶予期間のリセットには管理者権限が必要なので、
[すべてのプログラム]→[アクセサリ]→[コマンドプロンプト]を右クリックして、
[管理者として実行]を選択

②現在のライセンス認証情報の確認
コマンドプロンプトで、
   >slmgr -dlv
 と入力すると、ライセンスサービスのダイアログが起動し、
 「残りのWindows猶予期限リセット可能回数」を確認できる。

③ライセンス猶予期限のリセット
>slmgr -rearm
と入力すると、「コマンドは正常に完了しました。
変更を有効にするにはコンピュータを再起動してください。」
とダイアログ表示される。

④再起動する

詳細は、
Windows 7 の再初期化数について | SE の雑記

2013年5月1日水曜日

Androidアプリ開発 GPS機能ON/OFF

スマホを紛失したとき、
 ・マナーモードをオフ
 ・GPSオフ
 ・データ通信オフ
にしてたので、電話をかけても聞こえず(当然^^;;
docomoのケータイお探しサービスも役に立たなかったので、
 ・マナーモードをオンにして音量最大に
 ・GPSをオン
 ・データ通信オン
にするアプリを作ろう!と調査開始。

通常のアプリではパーミッション(WRITE_SECURE_SETTINGS)の設定が許されてなく、
GPSオンのAPIは標準で提供されていない。
(データ通信オン・オフも非標準ですが....)

IntentをBroadCastして実現する方法を見つけた。

(抜粋)
private void turnGPSOn(){
    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

    if(!provider.contains("gps")){ //if gps is disabled
        final Intent poke = new Intent();
        poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
        poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
        poke.setData(Uri.parse("3"));
        sendBroadcast(poke);
    }
}

しかし、この方法は、Android2.3以降より使えなくなったらしい。
N03-E(Android 4.0.4)ではまったく無反応(T T)
しか~し、Nexus7ではGPSがONになった。
Android 4.2.2から復活したのだ!?
よ~わからん。

2013年4月22日月曜日

Androidアプリ開発 着信イベント 取得方法

Androidで、電話の状態イベントを取得するには、
android.telephonyパッケージのTelephonyManagerクラスとPhoneStateListenerクラスを使う。

・リスナーの定義
 PhoneStateListenerのonCallStateChanged()メソッドをオーバーライドして、
 イベント取得時の処理を記述する。
 
・リスナーの登録
 TelephonyManagerクラスのlisten()メソッドを呼び出し、PhoneStateListenerを登録する。

なお、TeleohonyManagerは、getSystemService()で取得する。

(例)抜粋

        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

        // リスナーの作成
        PhoneStateListener listener = new PhoneStateListener() {
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                String stateString = "なし";
                switch (state) {
                case TelephonyManager.CALL_STATE_IDLE: //待ち受け状態
                    stateString = "待ち状態";
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK: //通話開始時
                    stateString = "通話開始 "+ incomingNumber;
                    break;
                case TelephonyManager.CALL_STATE_RINGING: //着信時
                    stateString = "着信中"+ incomingNumber;
                    break;
                }
                text.append(String.format("\n電話: %s",stateString)); // TextView(text)に出力
            }
        };

        // リスナーの登録
        telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
    }


なお、Android.manifest.xmlにpermissionの登録も必要
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

2013年4月18日木曜日

Androidアプリ公開から2ヶ月半たって


初めてAndroidアプリを公開したのは、1/29。
結局どこにも取り上げてもらえず、キーワード検索でも下の下の方に出てくる状況だったが、
気がついたら、1件レビューコメントが入っていた。
ありがとう~(涙)

約1か月後の2/27時点で、
 合計インストール数 195
 有効インストール数 84

約2か月半後の4/17時点で、

 合計インストール数 722
 有効インストール数 281

と地道に増えている。
他の通信ソフトに比べたら、まだまだだけど、
GWに新しいアプリを開発して登録しようか、という気になってきた(^^)。


(気づきその1)
デベロッパーのウェブサイトをFaceBookに変えた(2/26)後、
英語のメールが4通ほど届いていた。
・SafeApp証明書
・アプリのインストール数を増やす方法教えてあげるよ(もちろん有料)
・広告プラットフォーム用タップを試しませんか
・アプリのインストール数を増やすために検索ランキングを上げませんか
 (無料診断によると、私のアプリはconnectionで237位らしい)

というもの。
あやしい....(^^;;;

(気づきその2)
「Dell Blaze」という端末が登録機種名の第一位になっていた。
ほとんど日本人しかインストールしてないはずなのだが??と、
ググってみると、

docomoのT-01DとF-05DとF-08Dらしい↓
NTTドコモ開発者情報Blog「Androidマーケットでの登録名」





2013年4月3日水曜日

Androidアプリ 海外に行くと予定時間が自動的に変わるスケジューラって、、

ちょっと香港へ行ってきた。

イベントの時間を確認しようと、ジョルテを起動すると、

ん?
1時間前の時間?!
登録するとき間違ったのかなぁ、、、と他の予定の時間もずれている。

時差は-1時間。
親切に現地時間に変更してくれたのだ。


GPS機能はOFFにしているのだが、、、、。



携帯電話の時刻が自動的に変わるのは、
キャリアが変わったとき属する国・地域の標準時に合わせるんだろう。


Android端末の場合、

そのタイミングでGoogleにも通知がいくのか?!(Googleカレンダーと同期を取っているので)
と思ったが、Nexus7では日本時間のまま。

Android では、NTP は使わずに、3G回線による時刻合わせが行われているらしく、
WiFi接続では時刻も調整されないようだ。

参考サイト↓
http://android.ohwada.jp/archives/1435


ならば、ジョルテがやっているのか?
で、調べた。
たくさんあるアクセス許可の中に、

端末のステータスと ID の読み取り(READ_PHONE_STATE)

があった。たぶん、


android.telephony.TelephonyManagerクラスのgetNetworkCountryIso()

を使って国を取得してると思われ......。

しかし、自動的に時刻変更してくれなくても現地時間で予定を入れてる人
がほとんどじゃないんだろーか。
小さな親切大きなお世話だ。

どこかに注意が書いてあるのかもしれない(ジョルテのドキュメントは調べてない^^;;)が、
私たちは便利さと引き換えに個人情報を渡してるのね、、、。

なんだか怖くなってきた.....。



2013年3月6日水曜日

Windows Javaアプリを強制終了させるには

複数プロセスが起動している場合は、
コマンドプロンプトで、

>jps
と入力するとJavaプロセス一覧が表示されるのでプロセスIDを確認。

>taskkill /pid プロセスID  /F

で強制終了する

Windows コマンドプロンプトの起動方法

通常、コマンドプロンプトを起動するには、
[スタート]-[すべてのプログラム]-[アクセサリ]-[コマンドプロンプト]
だが、
ちょっと早く起動する方法

1)Windowsショートカットを使う方法(Windows XP, Windows Vista, Windows 7)
  【ウィンドウズキー + R】 で「ファイル名を指定して実行」ダイアログ表示
     cmd
 と入力して [OK]を押下 

2)Windows7だとさらに、
 Windows(またはStart)キーを押してダイアログ表示
 [プログラムとファイルの検索]フィールドにカーソルがあることを確認して
 cmd
 と、入力してEnterキーを押下

2013年3月5日火曜日

Java Logging API JDK7では

Javaの標準ライブラリでログを出力してくれるLogging APIについては、
以下のサイトに詳しく書いてある↓
http://www.02.246.ne.jp/~torutk/javahow2/logging.html

Logging APIのJava SE6からJava SE7への主な変更点

①Logger.getLoger(Logger.GLOBAL_LOGGER_NAME)は非推奨になったので、
  Logger.getGlobal()を使うこと
 
 (非推奨になった理由 このグローバル定数は初期化時にデッドロックが発生する可能性がある)

②SimpleFormatterクラスのフォーマットをプロパティで記述できる
 (Java SE 6まではSimpleFormatterクラスのサブクラスを定義しないといけなかった)

しかし、(Java SE7 update17時点では)実装に問題があり、ログが出ないことがある。
logger.setLevel(Level.INFO)を呼び出すことで回避できるらしい。
が、コンソール出力はOKだが、ファイル出力はNGだった。

(例)ソースの一部
  Logger logger = Logger.getGlobal();   // Logger.GLOBAL_LOGGER_NAME)は非推奨
  logger.setLevel(Level.INFO); // バグ回避
  logger.info("info log");

Javaアプリケーションでログ出力するには

Javaでよく聞くログライブラリは、
①java.util.loggingパッケージ
②Apache Log4J
③SLF4J
④commons-logging
⑤Logback

①はJDK1.4から入っている標準ライブラリ
それ以前は②を使ってたから、いまだにLog4Jを使ってるところが多いらしい。
②Log4Jの創始者中心になって開発したのが、③SL4J

①・②・③はログを出力してくれるライブラリだが、
④⑤は、ラッパー。
実際のログ出力に何を使っていたとしても、標準のインタフェースを提供するもの。
⑤Logbackは、④commons-loggingの後継と言われている。

まとめると、
 昔はApache Log4J+commons-logging 
だった(いまでも一番多い)が、
 これからはSLF4J+Logback

でもそのまえに標準のjava.util.loggingパッケージを使ってみよう。
機能的には劣るが、なんせ標準パッケージなので、
何も準備がいらないのがいい!
(②や③はjarファイルをダウンロードして、クラスパスを設定しないといけない)

2013年3月2日土曜日

Androidの隠しコマンド

Androidバージョンが表示されている個所を連打すると、
そのOSバージョンのキャラクターが出る話は有名だが、
今日、たまたま見つけてしまったのは、

電話番号の入力画面から、
*#*#4636#*#*
を入力すると、
携帯電話の情報を表示・設定できるらしい。

以下のサイトで電池節約術として紹介してあった。
http://androck.jp/news/topics/android-4-0life-tuushinnsetteihenn/

(自分の端末は「LTE WCDMA」となっていたので、「WCDMA only」にはしなかった。)

各メニューの説明↓
http://www.ecoop.net/memo/archives/2011-04-22-1.html

2013年3月1日金曜日

Androidアプリ公開から1ヶ月たって

1/29にAndroidアプリを公開してから、約1ヶ月過ぎた。
宣伝してもらおうと、レビュー依頼を出したが、
まったく取り上げてもらえず(^^;;;

結局、
2/27時点で、
合計インストール数 195
有効インストール数 84

どこにも取り上げられないと、こんな数なのだろうか。

入れてからアンインストールする人が多い?!
その理由が知りたい。。。。

それとも、一般的に、こんな数なのだろうか?

ずーっと評価がついてなかったけど、
100件を超えた頃「4」の評価が1つ\(◎o◎)/!
うれしかった~(*^^*)v

2013年2月3日日曜日

Android 公開アプリのインストール数を増やすには

作成したアプリをGoogle Playに登録したが、インストール数1桁/日。
公開しただけじゃ、やまのようなアプリに埋もれてしまってダメなのか....orz
ということで、ググってみた。

Androidアプリのダウンロード数アップのための宣伝方法。2012年版↓
city.hiroshima.lg.jp/www/contents/0000000000000/1355287961272/index.html

1)Androidアプリのホームページを作る
 最初の登録ではeメールアドレスだけにしていたが、
 それじゃ怪しい人が作ったアプリっぽくて誰もインストールしてくれないよなぁ、と、
 とりあえずこのブログをWebサイトURLとして登録した。

2)レビュー依頼をする
 やってみたが、最近はレビュー依頼もやまほどあるみたいで、いまのところ反応なし。
 地味なアプリは厳しい。
 
 参考サイト↓
 http://create-hotaroid.blogspot.jp/2012/03/android_16.html
 

その他
3)動画を作る
 → ゲームじゃないからなぁ、、、、。

う~ん....。
そもそも通信設定切替アプリなんて必要ない(使わない)のかなぁ....orz

他に参考にしたサイト↓
http://zetsuboh.blogspot.jp/2012/11/android.html

20インストールで絶望してたら、ワタシなんてどうなるんだ!?

(おまけ)

登録したのは、通信設定を切り替えるだけのアプリ(OFF, WiFi, LTE/3G, テザリング)
 https://play.google.com/store/apps/details?id=jp.co.waangma.network

2013年2月1日金曜日

Google Play (Androidマーケット) 登録のために

(1)アイコンの作成

アイコンガイドラインも時代とともに変わる↓
http://developer.android.com/intl/ja/guide/practices/ui_guidelines/icon_design.html

・PNGファイルを解像度毎に用意する(最低1つは必要)。Google Playで512×512のアイコンを登録する必要があるので、それを作って縮小する。


一応、テンプレートファイルが用意されている↓
http://developer.android.com/intl/ja/guide/practices/ui_guidelines/icon_design.html#templatespack


が、Webデザインは素人なので、フリーアイコンをもとに修正して作成した。


リンクフリーサイト一覧↓
http://kachibito.net/web-design/free-icon-seto-for-commercial-use.html

Androidアイコンいろいろ↓
http://phpjavascriptroom.com/?t=mobile&p=iphoneandroidmockup#a_android_appicon


(2)AndroidManifest.xml設定見直し

 ・最小APIレベルの設定 
   <uses-sdk>要素の android:minSDKVersionで指定されている。変更可能。

  ・アプリケーションのバージョン
 バージョンには、2種類ある。バージョンアップの場合は以前より大きい数字にする。
 <manifest>要素のandroid:versionCode バージョンアップの判断に使う整数。最初は1にする。
 <manifest>要素のandroid:versionName ユーザに見えるバージョン番号。文字列。最初は1.0にする。

 ・アプリケーションのラベル
 アイコンの下に表示される文字列。各国の文字表記にしたい場合は、文字列リソースを使う。
 <Application>要素のandroid:labelで指定されている

 ・アプリケーションのアイコン
 <Application>要素のandroid:iconで指定されている


(3) 署名付きのapkファイルの作成
Androidアプリケーションを公開するには署名が必須。署名はEclipseで作る自己署名でOK↓

(4)登録前に、
 ・スクリーンショット2枚以上を用意する。スクリーンショットの撮り方↓
 ・アプリケーションの説明文を考える。

(5)いよいよ登録
 Google Play Developer Console↓から登録。登録料は$25。クレジットカード承認が降りるまで公開されない。


で、登録した。時間がかかるようなメッセージがあったが、1時間くらいで登録が反映された。
登録には、公開するメールアドレスかWebサイトが必要で、スパム (メール)が来たら嫌だな、と、専用のメールアドレスを取ったのだが、一晩たってもダウンロード数

0件 

笑うしかない(^^;;

登録したのは、通信設定を切り替えるだけのアプリ(OFF, WiFi, LTE/3G, テザリング)