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

2016年3月14日月曜日

Androidコマンドの備忘録

詳細を省いてしまいますが、Android開発で用いるadbコマンドや署名作成に関するコマンドを忘れないよう記します(よく使う、またはたまにしか使わないけどいざという時忘れちゃうコマンド限定)

Logcat表示

adb logcat

バックトレース出力

adb logcat | $NDK_ROOT/ndk-stack -sym proj.android/obj/local/armeabi/

NDK_ROOTの定義必須
(当然NDKのパス記述でもOK)

また、実行しているアプリのproj.androidまで移動しておく。
こちらもパス記述でもOK。

デバイス一覧

adb devices

apkインストール

adb install -r xxx.apk

-rオプションは同一apkがある場合に上書き

署名作成

keytool -genkey -v -keyalg RSA -keystore ~/xxx.keystore -alias xxx -validity 10000

アプリURLを自動振り分け

アプリリリース後にtwitterやFacebookなどで宣伝するかと思います。
その際、twitterやFacebookの機能でURLを貼り付けた時に自動的にカードのような表示に置換えられます。
iOSとAndroidでリリースしている場合に記事内に両OSのURLを載せてもどちらかのURLだけカード表示され、異なるOSのダウンロードページへ飛ばしても意味がありません。
ユーザに判断させるのも違いますし、折角アクセスしてもらってもダウンロードに至らない、なんてのは無くしたいですね!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <meta name="twitter:card" content="summary_large_image" />
 <meta property="og:title" content="(アプリタイトル)" />
 <meta property="og:description" content="(アプリ説明)" />
 <meta property="og:image" content="(カード画像URL)" />
 <meta property="og:url" content="(リンクURL)" />
 <meta property="og:type" content="game" />
 <meta property="og:site_name" content="(サイト名)" />
 <title>(サイト名)</title>
 <script type="text/javascript">
  var userAgent = navigator.userAgent.toLowerCase();
  window.onload = function(){
   if(userAgent.indexOf("android") > -1){
    // Google Play
    launch_frame.location.href = "(URLスキーム)";
    setTimeout(function(){
     location.href = "(GooglePlay URL)";
    }, 500);
   }else if(userAgent.search(/iphone|ipad|ipod/) > -1){
    // App Store
    launch_frame.location.href = "(URLスキーム)";
    setTimeout(function(){
     location.href = "(AppStore URL)";
    }, 500);
   }else{
    location.href = "(AppStore URL)";
   }
  }
 </script>
</head>
<body>
 <div style="width:0; height:0; overflow:hidden;"><iframe id="launch_frame" name="launch_frame"></iframe></div>
</body>
</html>
metaタグ内のogから始まるpropertyはOpenGraphProtocolというものでSNSでシェアされた際にサイト名やURLを正しく伝えるための設定です。
twitterカードの仕様についてはこちら(公式)

コードの簡単な説明をするとUserAgentによってAndroidとiOSを振り分けています(UA偽装していたら正常に判定出来ません)
また、AndroidでもiOSでもない場合(PCからアクセス等)はAppStoreに飛ばしています。
OS判定後、URLスキームを用いてアプリの起動を試みます。
アプリ起動出来ない場合(500ms応答なし)はダウンロードURLへリダイレクトしています。
端末の設定にもよりますがダウンロードURLへリダイレクトした場合、自動でアプリが起動するはずです(AndroidならGooglePlay、iOSならAppStore)

また、上記コードではSummary Card with Large Imageというカードタイプを利用しています。
twitter内で目立って良いかなという程度の理由です。
カード画像については1024x500の画像を使用しています。
(仕様的には最低280x150で容量1MB以内らしいです)

URLスキームについては別記事にしましたのでご参考までにm(_ _)m

OS毎のアプリURLの形式については言わずもがなですが一応。。。
GooglePlay URLは以下の形式
https://play.google.com/store/apps/details?id=XXX
AppStore URLは以下の形式
https://itunes.apple.com/jp/app/XXX/idXXX?l=ja&ls=1&mt=8

設定出来たらWebサーバにアップロードして構文チェックを行いましょう。
Card Validator(公式)

twitterカードの仕様にもありますApp Cardですが、これを用いれば上記コードと同等の振り分けがmetaタグだけで出来そうですが、Facebookとかで同様の振り分けを行えるかは試してないので分からないです。。。
カード画像を用意しなくてもアプリロゴを補完してくれそうな雰囲気もしますが、せっかくスクリーンショット用などで横長の画像も用意しているかと思いますのでインパクト重視でLarge Imageを使うのも良いかなと思います!

2016年3月13日日曜日

URLスキーマについて

アプリにはURLスキーマというものを設定することが出来ます。
これを設定することで別アプリからインストール可否を判断したり、Safariなどからアプリ起動をすることが出来るようになります。

< iOS >
Xcodeにて設定します。
TARGETS -> Info -> URL Types
IdentifierとURL Schemesに設定します。

IdentifierにはBundle Identifierと同じ値を設定しておけば概ね問題ないかと。
URL Schemesに設定するものが上記で説明したものになります。
aaaと設定すればSafariにてaaa://とアクセスすることでアプリが起動します。

ただし、aaaなんて誰でも思いつくようなスキーマを設定しない方が良いです。
仕様としてApple提供のアプリと被った場合はAppleアプリが起動、他アプリと被っている場合には何が起動するかは不定、となっています。
なのでBundle Identifierを整形したものやデベロッパ名などを組み込んでユニークな値となるように設定しましょう。

< Android >
AndroidManifest.xmlにて設定します。
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="XXX" android:host="execute" />
</intent-filter>
こちらも設定するとChromeなどからアプリ起動出来るようになります。

2016年3月11日金曜日

Xperia Z3 compact (docomo, SO-02G)をグローバル化・その2

前回の記事の続きです。
今回はいよいよ実行手順について。

実行手順、結果については自分の環境であれば問題なく完了した、というお話です。
端末環境や製造時期などで異なる可能性もありますので参考程度に留めてください。
また、ROMの焼き直しとなりますので一切動かなくなる、ネット通信が出来なくなる等の症状が発生する可能性があります。
一切の責任を負いませんので自己責任でお願いします。

その前に…

今回はXperia Z3 compactのdocomo, SO-02GをグローバルモデルのROMに焼き直します。
そのため日本固有の機能(赤外線とかFelicaとか)は使えなくなります。
改めて普段利用していないかご確認ください!

また、LINEの機種変更手続きを忘れずに!
きちんと事前に手続きしておかないと同一アカウントでログインしてもスタンプとかコインとか諸々消えちゃいます(´・ω・`)
Facebookとかtwitterとかもアプリで使用しているとパスワードを忘れがちです。
必要であればログイン出来ている内に手続きしておきましょう(パスワード忘れてる場合、ログイン可否に関わらず問い合わせ方法は一つしかありませんが…)
あ、あとWi-Fi設定も消えちゃうので事前に用意しておきましょう!
あとはゲームアプリなんかも機種変更手続き等でアカウント情報を引き継げる状態にしておきましょう!
大抵アカウントIDとパスワードなんかが発行されると思いますのでスクリーンショット撮ってPC等に転送しておくのをオススメします!

Flashtoolの入手

まずはFlashtoolをダウンロードしましょう。
それぞれの環境(Windows, Linux, MacOSX)に合ったものをダウンロードしてください。

自分が使用したものはver0.9.19.10でした。

FTFファイルの入手

Flashtool起動後にXIマークをクリックして、XperiFirmを起動します。
ただ、Macだと何も反応しないです。。。Flashtoolのアプリケーションディレクトリを見たらexeファイルが出来ていたのでWindowsじゃないと呼び出せないのかもしれません。

こちらのサイトにFTFファイルがまとまっていますので参考までに。
他サイト様を参考に以下ファイルを利用しました。
Xperia Z3 compact LTE-A [D5803]
23.0.A.2.93 USA

ROM焼き直し

まずFlashtoolの実行ファイルがあるディレクトリにfirmwaresディレクトリがありますので、そこにFTFファイルを置きます。

Flashtoolを起動して、左上の雷マークをクリックします。
BLUはBootLoader Unlockの略らしいです。

Flash ModeとFastboot Modeが選択出来ると思うので、Flash Modeを選択。

Wipe: APPS_LOG, USERDATAにチェック
キャッシュファイルや内部ストレージを削除するかどうか、なのですがROMが異なるため以前のファイル達がどんな悪さをするか分かりません。
どうせ初期化するので削除してしまいましょう。

Exclude: AMSS_FSG, AMSS_FS_1, AMSS_FS_2, MODEMにチェック
除外するカテゴリを指定します。
通信帯域に関する情報が記述されているそうで、日本とUSAでは通信帯域が異なるので除外しましょう。
除外しないとROM焼き直し後にLTEが繋がりにくい等の症状が発生する可能性があります。

上記WipeとExcludeの項目はFlashtoolのバージョンによって名称が違うぽいです。
それぞれの項目の詳細が知りたい方はこちらのサイトが丁寧に解説してくださってます。

ダウンロードモード起動

Flashしてしまえば後は指示に従うだけです!
端末からUSB抜いて→電源OFF→ボリューム下ボタン押しながら→USB接続
これでダウンロードモードになります。

Flashtoolにログが出てくるので静かに待ちます。
自分の場合は数分でした。

あとは端末購入時と同様、初期設定をしていきます。
USAのROMでもちゃんと最初に日本語設定出来るのでご安心を!
設定の端末情報にてモデル番号がD5803となっていれば無事成功です!

その後に…

晴れてdocomoの呪縛から解き放たれ、色々無効化したりスタミナモードを屠ったりしたり、早速LINEやらtwitterやらを設定したい気持ちは分かるのですが、まずはソフトウェアアップデートが全て完了するのを待ちましょう。

これが果てしないです…
古いビルド番号のものを入れているのでしょうがないです。
何度も新しいアップデートがあります、インストールの準備が出来ました、再起動を繰り返しますので充電しながら待ちましょう。
1時間以上は見ておいた方が良いかもしれません(´・ω・`)

最終調整

ソフトウェアアップデートも落ち着いたら、最後に確認した方が良い項目があります。

  • Wi-Fiを切ってモバイル通信が正常かチェック
  • 電話をする
  • 電話をしてもらう
最低限上記だけは最初にチェックしておきたい所です。
(スタミナモードのチェックとしてスリープ状態で実施するのも良いと思います)

また、グローバルモデルでは日本モデルと少し異なる点があるので調整していきます。
主に節電対策とかネットワークの安定に繋がると思いますので参考までに。
こちらのサイトを参考にさせて頂きました!

ネットワーク設定
電話を起動します。
「*#*#4636#*#*」と入力してください。
最後のアスタリスクを入力した時点で画面が切り替わります(通話とかは押さなくてOK)

携帯電話情報の優先ネットワークを設定→LTE/WCDMAを選択

NFCを削除
設定→その他の設定→NFCがグレーアウトしている
こいつの電池消費が激しいそうです。。。

NFCサービスをkillする必要があるのですが、adbコマンド(Android Debug Bridge)というものが必要になります。
自分はアプリ開発者なのでPC環境にadbコマンドを導入していたので問題ないのですが、普通のPC環境には入っていないので導入する必要があります。
導入方法につきましてはGoogle先生が詳しい&丁寧ですので割愛させて頂きます。

adbコマンドからkillすれば先ほどのグレーアウトしていたNFCの表示がなくなります!

あとは細々とした輝度を落としたりとか自動回転を切ったりとか、プリインストールされてるアプリ削除(または無効化)したりとか自分好みに設定頂ければと!

自分はROM焼き直し前からSIMロック解除していてU-mobileの格安SIMを使っていました。
ROM焼き直し後も何も変わらず使用出来ております!
また、docomoのプリインストール削除やらスタミナモードの適用やらでXperiaさんが言うには5日以上持つようになりました。
実際充電するタイミングは明らかに伸びました!
(普段全然スマホ触らないので参考にならないかもです…)

これから実行される方、あくまで自己責任でお願いします!
ただ、同じXperia仲間として成功することを心より願っております!

2016年3月6日日曜日

Xperia Z3 compact (docomo, SO-02G)をグローバル化・その1

Xperia Z3 compactを普段利用しているのですが、購入時にdocomo端末かグローバルモデルにするか悩みました。
背面のdocomoロゴが嫌だ、というのとプリインストールされてる(かつ削除や無効化出来ない)不要なアプリがあるという理由でグローバルモデル一択だったのですが、購入を迷っていた時にdocomo端末の投げ売り値下げが行われました。
数年前の白ロムと同程度まで値下げ(たしか3万円前後)されまして、当時グローバルモデルが5〜6万円していたので、さすがにdocomo端末で甘じました。。。


現在でも同程度の価格でやり取りされているようです。
スペック的にも非常にお得な買い物だったと思っております。

[ 不満点 ]
AndroidOS KitKatですのでSDカードへアプリを移動することは出来ません。
プリインストールアプリのFile Commanderを使用することで画像ファイルや音楽ファイルをSDカードへ移動することは可能。
ただし、画像ビューアアプリや音楽プレイヤーアプリから参照可能なディレクトリは限定されています。
これのせいで微妙に不整合が起きたりしておりました。。。(ファイルが正常に認識されなかったり等)
また、内蔵ROMにゲームアプリが2,3個入ってるだけでアップデートデータでどんどん圧迫されていきます。。。

そして7月末頃にLollipopが配信され、SO-02Gにてアップデートデータが来ました!
LollipopからこのSDカード制限がなくなるとのことで心待ちにしていました。
(アップデートスケジュールはキャリアやメーカーによってコントロールされているためAndroidOSが発表されても適用出来ないのです)


喜び勇んで適用したのですが、なんとアプリのSDカードへの移動が出来ないのです。。。
こちら調べた所、Z3 compactでもグローバルモデルでは問題なく移動が出来るそうで。。。
ネットで調べた情報によるとdocomoによる制限が入っているらしい、とのことでした。
(オフィシャルな情報は見当たりませんでした)

使用して一年、結果として常に「内蔵ROMが75%使用されています」お知らせが出続ける状態になってしまいました。。。
これはXperia側の機能で内蔵ROMを確保するために画像や音楽ファイル、アプリを移動してくれようとするのですが、アプリの移動だけは前述同様に何度やっても転送失敗します。

このままお知らせマークと共に生活をするのは耐えられないのでグローバルモデルのファームウェアに焼き直すことを決めました!
実行手順、結果については次回記事に致します!

2016年1月29日金曜日

アプリバージョンについて

<iOS>
Xcode -> TARGETS -> Generalから編集します。
Version = ユーザにも見えるバージョン
Build = AppStore側で最新のアプリを判断するためのバージョン番号

<Android>
AndroidManifest.xmlを編集します。
versionCode = GooglePlay側で最新のアプリを判断するために使用(整数のみ)
versionName = ユーザにも見えるバージョン

アプリのパッケージ名とアプリ名変更

パッケージ名変更

AppStoreやGooglePlayにてユニークに管理するためにパッケージ名を決める必要があります(AppStoreとしてはパッケージ名という呼び方ではありませんが)
com.google.XXXのような形式です。
一般的には自身で保有されてるドメインを逆順にjp.YourDomain.AppNameみたいな形式にするのが多いです(トップレベルドメインはjpだったりcomだったりしますが)

かの有名なパズドラは「jp.gungho.pad」
Puzzle And Dragonsの頭文字ですね。

<iOS>
アンダースコア利用不可
XcodeにてTARGETS -> General -> Identity -> Bundle Identifierから変更可能です。

<Android>
ハイフン利用不可
AndroidManifest.xml -> package変更
eclipseにてsrc配下をエクスプローラからリファクタリングし、javaファイル内のpackageも修正。

iOSとAndroidで揃えておく必要はありませんが、社内で開発してる等の場合、揃えておいた方が管理がしやすいかなと思います。
また、iOSではアンダースコア利用不可だったりAndroidではハイフン利用不可ですので記号を使わずに設定しましょう。
ユーザには見えない箇所(GooglePlayではURLの一部)なので管理のしやすさを優先しましょう。
パズドラほど簡素すぎるのもアレかなと思いますが。。。

アプリ名変更

アプリをダウンロードしてもらった後にホーム画面等で表示されるアプリ名です。
AppStoreやGooglePlayで表示されるアプリ名とは異なります。

<iOS>
全角6文字(半角11文字)
最新のiPhone、iPadだと異なるかもしれない。。。

XcodeのTARGETS -> Info -> Custom iOS Target Properties -> Bundle display name

ローカライズする場合、主言語のアプリ名を上記箇所に設定。
XcodeにてInfoPlist.stringsを作成(空ファイル)します。
右のLocalizationクリックし、言語選択。
CFBundleDisplayNameに各言語用のアプリ名を設定します。

<Android>
全角5文字(半角10文字)
こちらも機種やメーカーによって結構異なります。

eclipseにてres -> values -> strings.xml -> app_nameから設定。

アプリ名はiOSとAndroidの文字数の制限を考えると全角5文字(半角10文字)で設定しましょう。
アプリの略称とかをオススメします。