まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:android

クラウドファインディングサイト "KICK STARTER" で出資した「世界最小4Gスマホ」を唄う "Jerry Pro" の完成品が届きました:
2017092301


箱を開けた状態がこれです。比較のため iPhone6 を隣においてますが、厚み以外は Jerry Pro の箱の方が小さいですw:
20170923


ここでサイズのスペックを書いておくと、本体は 43mm x 92.3mm x 13.3mm で、バッテリー込みで60.4 グラムです。今回購入した Jerry "Pro" とは別に Jerry というモデルもありますが、RAM と ROM のサイズだけです(Jerry($79) は 1GB + 8GB、Jerry Pro($95) は 2GB + 16GB)。バッテリーサイズは 850mAh で、最近のスマホと比べると流石に心もとないかもしれませんが、「大画面で動画を観る」ような使い方はないので大丈夫、なはず!! (^^;

カメラは背面 8MP + 正面 2MP で、画面サイズは 2.45 インチ(!)で 240 x 432 ピクセルです。そうそう、こういうのが欲しかったわけですよ。

ちなみに色は白、黒、青から選択できました。自分はなんとなく「青を買わないといけない」気がしたのでケースと併せて青にしておきました。 (^^;

左手でグリップした時の違いはこんな感じ。iPhone6 は親指を立てて握ることになりますが、Jerry Pro を同じ位置で握ると親指が余ってしまうので親指も曲げて握る感じになります:
20170923


最近のスマホでは珍しいと思いますが、裏蓋を(爪とかで)開けるためのロッチがあります:
IMG_1552



バリバリッ、と開けるとこんな感じ。バッテリーは(入手できればですが)自分で交換することもできそうです(最近のは精密になりすぎて、こういう仕組みが少ないのが残念):
IMG_1553


充電池をはずすとカード類を格納する部分が現れます。デュアルSIM機なので nano SIM が2つ同時に入ります。MicroSD カードもここから挿します。なおこの仕様により、SIM の差し替えには一度電源を OFF にする必要があります(電源を入れたまま SIM を差し替えることはできません):
IMG_1554


別売り(今回の KICKSTARTER のでは付属)のジャケットを換装して握り直してみた様子がこんな感じです:
IMG_1555


ここからは実際に電源を入れた画面になります。スクリーンショットでもよかったのですが、サイズ感をわかりやすくする目的で手と一緒に別カメラで撮影しました。ちなみに自分の手は男性としてはかなり小さいはずです(トレーニンググローブだとS サイズ)。


電源を入れた起動直後の画面です。うーん、この時点で見たこと無いくらい小さい。アイコンは3列しかなさそう:
IMG_1556


設定画面からスペックを確認しました。Android 7.0、クアッドコア、RAM メモリ 2GB。ROM の 16GB は MicroSD で拡張できるので気にしてません。最近アンドロイドスマホをあまり買っていなかったこともありますが、Android 7.0 搭載機を使うのは初めてかも:
IMG_1557


普段使いの日本語入力 simeji を入れて日本語フリック入力画面を確認してみました(検索履歴は無視してくださいw)。やっぱ入力はキツそうだな~(なぜか嬉しそう):
IMG_1560


英語フルキーボードだとこんな感じ、これはかなりキツいぞ・・・実際、普段のスマホと比べると打ち間違い率はそれなりに高い印象です:
IMG_1561


個人的にはあまり使わないのですが、テンキー入力はこんな感じ:
IMG_1562


Android なので普通にできることですが、日本語表示+日本ロケールに設定しました:
IMG_1564


パターンロック解除画面です。これでもかなりコンパクトになってるのがわかるかも:
IMG_1565


試しに Google Play Store を起動してみました。全体的に「詰まってる」感がありますね:
IMG_1566


とりあえずはこんな感じ。正直、テキスト入力にはあまり適したデバイスとは思えないので、今まで以上に音声入力を駆使することになるかもしれません。

でもその難点を克服して余りある魅力の詰まった端末です。最近のスマホは大型化がトレンドになっていて、昔のウォークマンみたいな「限られた小さい空間に技術を詰め込む」のが大好きな人間としては「このトレンドに一石を投じる意味でも、こういう考えのスマホが欲しかった」のでした。


Android アプリケーションを開発するための統合環境 Android Studio を CentOS に導入する手順を紹介します。なお、Android Studio は GUI を使うので、CentOS に X Window System などのデスクトップ環境を導入し、かつ VNC などを使って(ターミナル画面ではなく)デスクトップ画面にアクセスできるような環境が構築できているものとします:
2016011701


まず Android Studio を利用するための前提として、1.7 以上の JDK が導入されている必要があります。推奨環境は Oracle Java のようですが、OpenJava(OpenJDK) でも動くようです。というわけで OpenJDK の 1.7.0 以上を導入します(以下の例では 1.8.0 を導入しています):
# yum install java-1.8.0-openjdk-devel

環境によっては 1.7 未満の Java が導入されていて、かつそちらがデフォルトに設定されてしまっている場合もあります。その場合は alternatives コマンドでデフォルトを 1.7 以上に変更しておきます:
# alternatives --config java

3 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
   2           /usr/lib/jvm/jre-1.5.0-gcj/bin/java
   3           /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java


例えばですが、↑この例では 1.6, 1.5, 1.8 の3つのバージョンが導入されていますが、1.8 を使いたい場合は 3 を選択してシステム上のデフォルト Java バージョンを変更します。


JDK の準備ができたら Android Studio をダウンロードしてインストールします。このダウンロードページ内の、(画面上部の "SDK Tools Only" ではなく)下の方にある "All Android Studio Packages" から、Linux Platform 用の最新版モジュールをダウンロードします。この図の例では android-studio-ide-141.2456560-linux.zip というファイルを CentOS 環境内にダウンロードします:
2016011702


CentOS 側ではダウンロードしたファイルを適当なフォルダ(↓の例では /opt/AndroidStudio)内に展開します:
# mkdir /opt/AndroidStudio
# cd /opt/AndroidStudio
# wget https://dl.google.com/dl/android/studio/ide-zips/1.5.1.0/android-studio-ide-141.2456560-linux.zip
# unzip android-studio-ide-141.2456560-linux.zip
# rm android-studio-ide-141.2456560-linux.zip

ここからはデスクトップ環境を使ってセットアップを行います。CentOS のデスクトップ環境にログインして、先程展開した中の android-studio/bin/studio.sh を実行して、セットアップウィザードを起動します:
# cd /opt/AndroidStudio
# ./android-studio/bin/studio.sh

セットアップウィザードの最初に過去の同環境を引き継ぐかどうかを聞かれます。全くの新規で引き継ぐデータがない場合は "I do not have a previous version of Studio or I do not want to import my settings" を選択して "OK" をクリックします:
2016011701


Android Studio が起動します:
2016011702


最初の起動時にセットアップウィザードが実行されます。"Next" をクリックします:
2016011703


セットアップタイプを選択する画面では "Standard" を選択します:
2016011704


セットアップ内容の確認画面です。問題なければ "Next" をクリックします:
2016011705


最終確認画面です。このまま "Finish" をクリックするとセットアップが開始され、しばらく待ちます:
2016011706


セットアップが完了すると、そのまま Android Studio の起動画面に移行します:
2016011707


以前に試した時よりも設定内容が少なく、洗練された印象です。

 

先日の速攻レビューの時には知らなかったのですが、最新の BlackBerry OS では Android のネイティブアプリが(ある程度)動くような互換性があるようです。

ということは、BlackBerry ネイティブにないアプリを Android アプリで補完することもできる!?

その実用性を試そうとしたのですが、「では BlackBerry でどうやって Android アプリを入手するのか?」という別の問題が発生しました。Android でアプリを入手する一般的な方法は Google PLAY ストアアプリからですが、BlackBerry にはこのアプリがありません。。

が、その点で BlackBerry Passport には強い味方が最初からインストールされていました:
IMG_20150211_103554



アマゾン独自の Android 向け AppStore である Amazon Appstore アプリです。なんとこいつがプリインストールされていました。Google PLAY ストアほど充実しているわけではありませんが、これを使うことでアンドロイドアプリを探してインストールすることができるようです!
IMG_20150211_103600



早速試してみました。まずは待望のアングリーバード、こちらは正方形スクリーンでの描画も含めて問題なさそうでした:
IMG_20150211_103511


もう1つはジョルテ。こちらは起動には問題ないのですが、正方形の画面に未対応のようで、全体的に左に寄った画面構成になってました。ただ実用性に問題はなさそうです:
IMG_20150211_103537


この方法で SSH クライアント(vSSH) も VNC クライアント(Mocha VNC Lite) も入手できました。


残念ながら、やはり Amazon Appstore での品揃えはやはり限られていて、例えば LINE などはありません。別のもう少し高度というか、面倒な方法で apk ファイルを入手/転送する必要がありそうです。具体的には MyAppSharer あたりを使うことになりそう。ただそれでもアプリが正しく動く保証はありません。個別に使って調べないと。

とはいえ、この Android アプリとの互換性があるというのは、かなり強力な朗報です。BlackBerry 端末を使う以上はなんらかの形で活用することになりそう。



 

Android の開発環境、多くの人は Windows か MacOS X 上で構築すると思いますが、天邪鬼なので Linux(CentOS) で構築してみました。ちょっとコツが必要だったので、その備忘録です:

【環境】
OS: CentOS 6.6(64bit)
  (yum で X Window System, Desktop, JDK 1.7, firefox 導入済み) 
Eclipse: Eclipse LUNA(4.4.1)
  IDE for Java Developers を http://www.eclipse.org/ からダウンロード 

↑普通に CentOS 上で Eclipse + Java の開発環境を用意します。ここから先を説明します。


まずは Android SDK Manager をダウンロードして用意します:
http://developer.android.com/sdk/

↑ここから "SDK Tools Only" と書かれた箇所の Linux 用 Package の最新版をダウンロードします。ここでは android-sdk-r24.0.2-linux.tgz というファイルを /tmp にダウンロードしたと仮定します。

これを展開します:
# cd /usr/local/src
# tar xzvf /tmp/android-sdk-r24.0.2-linux.tgz

Path に tools ディレクトリを追加します:
# vi /etc/bashrc
  :
  :
export PATH=${PATH}:/usr/local/src/android-sdk-linux/tools
(↑この一行を最後に追加して保存)

Eclipse にプラグインを追加します。Eclipse を起動し、メニューから Help - Install New Software を選択して、"http://dl.google.com/android/eclipse/" を追加して、全ツールをインストールします。


全ツールインストール後に Eclipse の再起動が促され、再起動すると Android SDK コンポーネントのインストールが促されます:
2015012701


"Open Preferences" をクリックするとプリファレンスが開きます。ここで Android の SDK Location 上記フォルダを指定して、Apply をクリックします。
2015012702


ここで SDK Manager 経由でのビルドツールのインストールが促されます。"Open SDK Manager" をクリックします:
2015012703


Android SDK Manager が開きます:
2015012704


利用可能な項目のうち、ビルド対象にするバージョンを選択し、チェックを入れてインストールします。この辺りは下記の参考サイトを参照ください。


で、ここからが今回自分で体験して分かった内容です。実はこれだけだと Eclipse 内でエミュレーターの起動ができませんでした。adb や ddms の起動もできません。

僕の場合はライブラリが足りないことが原因でした。以下を実行して解決しました:
# yum install ld-linux.so.2
# yum install libstdc++.so.6
# yum install libz.so.1

2015012705



(参考)http://android.keicode.com/devenv/install-sdk-linux.php


 

WebView は、「ネイティブアプリに内蔵して使うブラウザ」です。

HTML5 をベースにするなどして、ネイティブアプリっぽい見栄えになったウェブアプリケーションであっても、利用するには URL を打ち込むか、ブックマークから選択するなどして(つまり、あくまでウェブページとして)利用することになります。

でも、そのようなウェブアプリは簡単にネイティブ化する方法があります。それが上述の WebView を使う方法です。WebView 自体はネイティブアプリケーションに組み込んで使う部品ですが、例えば「全画面 WebView だけを表示するネイティブアプリ」を作れば、(メニューの表示項目は何にするか、JavaScript を有効にするか無効にするか、最初に表示するページの URL はどうするか・・・などの設定項目はありますが)それはウェブブラウザでウェブページを見ているのと大きく変わりません。モバイルUIに対応したウェブページを比較的簡単にネイティブアプリ化する方法、といえます。

実際に自分も Android アプリ開発の中で使ってみる機会があったのですが、そこで想定外のことに1つ躓きました。それがタイトルにある「何も考えずに Android の WebView を使うと viewport が無視される」ということです。

これがバグ扱いなのか、何らかの理由があっての仕様なのかもよくわかりませんが、ともあれ何故か viewport は無視されてしまいます。

そしてそれが原因で、本来モバイルUIで表示されるべきページが、WebView を使って見た時だけモバイル端末と判断されず、PC 用の UI で表示されてしまう、という現象が起こってしまいます。

で、これを回避するための方法がこちらです。色々設定してますが、今回の肝は青字部分の2つ:
(1) 読み込み時にページ横幅を画面幅に無理やり合わせる
(2) ワイドビューポートへの対応
public class MainActivity extends Activity{
  public WebView webView = null;

  protected void onCreate(Bundle savedInstanceState){
      :
      :
    super.onCreate( savedInstanceState );
    setContentView( R.layout.activity_main );

    webView = ( WebView )findViewById( R.id.webView1 );

    //. JavaScript 有効
    webView.getSettings().setJavaScriptEnabled( true );

    //. リンクタップ時に標準ブラウザを使わない
    webView.setWebViewClient( new WebViewClient() );

    //. (1) 読み込み時にページ横幅を画面幅に無理やり合わせる
    webView.getSettings().setLoadWithOverviewMode( true );

    //. (2) ワイドビューポートへの対応
    webView.getSettings().setUseWideViewPort( true );

      :
      :
    //. 初期URLを指定してロード
    webView.loadUrl( "http://neppi.co/" );
  }

  :
  :
}

これで viewport を読んでいる時と同様に画面幅を強制的に変更して、本来の(モバイルUIの)ページに対応させることができました。

なお、WebView に関しては Android 4.3 以下の(WebKit ベースの)WebView については Google による脆弱性サポートが提供されなくなる、というニュースがありました(4.4 以上の Chrome ベースの WebView に対してのみサポート継続):
Google No Longer Provides Patches for WebView Jelly Bean and Prior

4.3 以下ってまだ結構多いはず。そして WebView を使ってるアプリってどのくらいあるんだろ?? その意味でも少し気になるニュースではあります。







 

このページのトップヘ