タグ : Android

[Android] SSHクライアントアプリ JuiceSSH

休日にサーバーアラートが飛んできても安心して対応できるように、SSHクライアントアプリ JuiceSSH をインストールしました。

JuiceSSH – SSH Client – Google Play の Android アプリ

Nexus5 にインストールしたのですが、SD カードを差すことができないので SSH 秘密鍵はメール経由でコピペしました。

他は UI が分かりやすいので接続先など特に困ることなく設定できました。

[Android] Google Play へのアプリのリリース手順

Google Play へ Android アプリをリリースする手順についてメモ。

基本的には、クラスメソッドのブログを読む。

よく分かる!Android アプリのリリース手順のまとめ | アドカレ2013 : SP #20 | Developers.IO

例えば、社内で既に Android アプリをリリースしていた場合、keystore ファイルの内容を確認すれば必要な情報はだいたい埋まるはず。

[Android] keystore ファイルの内容を確認するコマンド

アプリのリリース前になって思い出したかのようにこういう情報を用意するのは精神衛生上よくないので、事前に余裕持って準備したいですね。

[Android] keytool コマンドの文字化けを解決する方法

keytool コマンドで Android アプリの署名に使う keystore ファイルの内容を確認したところ Mac のターミナルで派手に文字化けしてしまいました。

keytool -v -list -keystore my-app.keystore
 
?L?[?X?g?A?̃p?X???[?h????͂??Ă???????:  
 
?L?[?X?g?A?̃^?C?v: JKS
?L?[?X?g?A?̃v???o?C?_: SUN
 
?L?[?X?g?A?ɂ? 1 ?G???g?????܂܂?܂??B
 
?ʖ?: com.exapmle
?쐬??: 2012/12/10
?G???g???^?C?v: PrivateKeyEntry
?ؖ??A???̒???: 1
?ؖ???[1]:
???L??: O=bakorer.com, C=JP
???s??: O=bakorer.com, C=JP
?V???A???ԍ?: 12b3389e
?L?????Ԃ̊J?n??: Mon Nov 26 18:38:38 JST 2012 ?I????: Fri Nov 20 18:38:38 JST 2037
?ؖ????̃t?B???K?[?v?????g:
	 MD5:  17:74:53:02:57:DB:80:62:4A:A6:D9:5F:6B:8D:AC:F2
	 SHA1: 12:F5:85:20:58:C6:5E:45:FF:03:AB:74:8F:20:D9:89:86:D5:3F:25
	 ?????A???S???Y????: SHA1withRSA
	 ?o?[?W????: 3
 
 
*******************************************
*******************************************

JDK で利用する文字コードに UTF-8 を指定してあげればいいみたいです。

export _JAVA_OPTIONS='-Dfile.encoding=UTF-8'

keytool の出力結果が文字化けせずに表示されました。

keytool -v -list -keystore  my-app.keystore
 
キーストアのパスワードを入力してください:  
 
キーストアのタイプ: JKS
キーストアのプロバイダ: SUN
 
キーストアには 1 エントリが含まれます。
 
別名: com.my-app
作成日: 2012/12/10
エントリタイプ: PrivateKeyEntry
証明連鎖の長さ: 1
証明書[1]:
所有者: O=bakorer.com, C=JP
発行者: O=bakorer.com, C=JP
シリアル番号: 12b3389e
有効期間の開始日: Mon Nov 26 18:38:38 JST 2012 終了日: Fri Nov 20 18:38:38 JST 2037
証明書のフィンガープリント:
	 MD5:  17:74:53:02:57:DB:80:62:4A:A6:D9:5F:6B:8D:AC:F2
	 SHA1: 12:F5:85:20:58:C6:5E:45:FF:03:AB:74:8F:20:D9:89:86:D5:3F:25
	 署名アルゴリズム名: SHA1withRSA
	 バージョン: 3
 
 
*******************************************
*******************************************

参考情報

Macでkeytoolコマンドが文字化けしたのでメモ – Androidはワンツーパンチ 三歩進んで二歩下がる

[Android] SPモードメールの受信メール/送信メールの文字サイズが大きかったり、小さかったりする

SPモードメールのアプリの文字サイズが大きい/小さいとかで使いづらかったのですが、アプリをアップデートしたら直るみたいです。

価格.com – 『4.1アップデート後のSPモードメールについて』 ソニーモバイルコミュニケーションズ Xperia AX SO-01E docomo のクチコミ掲示板

具体的には、文字サイズを変更しても、受信メールの文字サイズが大きくて、送信メールの文字サイズが小さいという状況になるわけです。

「設定」→「ドコモサービス」→「アプリケーション管理」→「アップデート一覧」で、「SPモードメール」のアップデートを探します。

現在は「SPモードメール」から「ドコモメール」というアプリに変わってるみたいなので、「ドコモメール」へアップデートすれば完了です。

Android はこういう設定がめんどうなので、不慣れな人は iPhone 買っておいたほうがいいのではと改めて思いました。

[Android] Xperia SO-01E で Googleマップを起動させると電源が強制オフになる

Xperia SO-01E で Google マップを起動させると電源が強制オフになるという残念すぎるバグが・・・。

ソフトウェアアップデートをしたら直りました。

(嫁のケータイで全くやっていなかったので、2回しました)

[Android] Google (Gmail) アカウントを端末から削除する方法

Android から Google (Gmail) アカウントを端末から削除する手順をメモ。

  1. [設定] アプリを開く
  2. [アカウント] から Google を選択する
  3. 削除する Google アカウントを選択する
  4. メニューから「アカウントを削除」をクリックする

今回は ARROWS NX から Google アカウントを削除したのですが、普段 Android を使わないので、メニューから削除できるのに気付きませんでした。

Gradle 入門記事まとめ

Android アプリ開発で Gradle を使い始めたので入門記事をまとめてみました。

Gradle 入門記事

Gradleの評判について

AndroidとiPhoneで使えるURLスキーム起動&アプリ未ダウンロードならストアへリダイレクトするJavaScriptサンプルコード

Android と iPhone で使える URL スキーム起動&アプリ未ダウンロードならストアへリダイレクトするJavaScriptサンプルコードをご紹介します。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>URL scheme / Redirect Test</title>
 
    <script type="text/javascript">
    var userAgent = navigator.userAgent.toLowerCase();
 
    window.onload = function(){
 
      if (userAgent.indexOf("android") > -1) {
        // Launch myapp via URL scheme
        launch_frame.location.href= "myapp://";
 
        setTimeout(function(){
          // Open App DL page in Google Play
          location.href= "http://market.android.com/details?id=com.example.myapp";
        } , 500);
      } else if (userAgent.search(/iphone|ipad|ipod/) > -1) {
        // Launch myapp via URL scheme
        launch_frame.location.href= "myapp://";
 
        setTimeout(function(){
          // Open App DL page in iTunes Store
          location.href= "itmss://itunes.apple.com/us/app/myapp/id123456789?ls=1&mt=8";
        } , 500);
      }
 
    }
    </script>
 
  </head>
 
<body>
  <div style="width:0; height:0; overflow:hidden;">
  <iframe id="launch_frame" name="launch_frame">
  </iframe>
  </div>
</body>
 
</html>

[Android] Google Play で「お使いの端末はこのバージョンに対応していません。」と表示される場合にチェックすべき点

開発した Android アプリが、Google Play で「お使いの端末はこのバージョンに対応していません。」と表示される場合にチェックすべきポイントをメモ。

「お使いの端末はこのバージョンに対応していません。」発生時のチェック項目

下記に、Androidでインストール可能な端末を限定する方法が書かれているので、ここに該当してる項目がないかチェックしましょう。

Android Tips #18 インストール可能な端末を限定する | Developers.IO

カメラ機能を使ったアプリで除外端末になってしまう例

例えば、カメラ機能をマニフェストで要求している場合、カメラを搭載していないAndroid端末は除外対象になってしまいます。

そういう場合は、uses-feature で android:required=”false” を記述する必要があります。

●<uses-permission>を記載して<uses-feature>を記載しなかった場合、自動的に有効になる<uses-feature>がある。

android.permission.CAMERAの例にとると<uses-feature>の記載がなくても以下の機能が有効になります。

<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus"android:required="true" />

どのパーミッションでどの機能が自動的に有効になるかは以下サイトを参考にしてみてください。
http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions

まとめ

カメラや位置情報を使ったアプリだと除外端末が増えてしまうので、しっかり <uses-feature> を確認する必要がありそうですね。

<uses-feature> | Android Developers

必須機能では無い場合、 android:required=”false” を指定して、インストール可能端末を増やして、インストールの機会損失を減らすように心掛けたいものです。

参考情報

Nexus7・N-06D・P-08DにおいてGoogle Playから「端末仕様確認ツール」がダウンロードできない事象について – NTTドコモ開発者情報Blog

[Android] 正しく時刻設定してないと Twitter 認証時にエラー発生

Android アプリにて、正しく時刻設定してないと Twitter 認証時に下記のような例外が発生してしまいます。

Received authentication challenge is null
Relevant discussions can be found on the Internet at:
	http://www.google.co.jp/search?q=10f5ada3 or
	http://www.google.co.jp/search?q=e574403a
TwitterException{exceptionCode=[10f5ada3-e574403a b8c63e52-c913c2cc], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.3}

動作試験で、時刻設定を未来の時間に設定したままで、今回のようなエラーが発生しました…。

とりあえず、バグではなかったので良かったです。