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

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

タグ:android

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 を使ってるアプリってどのくらいあるんだろ?? その意味でも少し気になるニュースではあります。







 

このページのトップヘ