Hatena::ブログ(Diary)

hishidaのblog このページをアンテナに追加 RSSフィード

プロフィール

hishida

hishida

EB series support page 管理人 ブログ

2016-07-19 Visual Studio Community2015 を入れた このエントリーを含むブックマーク このエントリーのブックマークコメント

どうも最近、開発環境の整備に時間を費やして、肝心の開発が何も進んでいないようだ。

1 Windows10の導入

Windows 10への無料アップデートの期限が7月29日までということで、重い腰を上げて、開発環境をWindows7からWindows10アップグレードすることにした。

当方の環境はMac OS XVMWare Fusionなので、これまで使用していたWindows7の仮想イメージは外付けハードディスクバックアップして削除し、Macbook proのディスクスペースを空ける。

手元にはMSDNに加入していた時に送られてきたWindows8.1のDVDライセンスキーがある(今はMSDNに加入してもDVD郵送サービスはないので、貴重だ)。

なるべくクリーンなWindows10を入れたいので、Windows8.1をクリーンインストールしてからWindows10アップデートすることにした。なお、MSDNの期限が切れていても、当時取得したWindows8.1のライセンスキーは現在も有効である。

Windows10インストール直後はWindows標準のディスプレードライバのために表示が非常に遅かったが、VMWare Toolsを再インストールするとVMWare SVGA 3D ドライバに更新され、快適に表示できるようになった。Windows10仮想マシンにはメモリ4Gと2CPUを割り当てる。実用上ほとんど不満を感じない。

Microsoft OfficeはOffice2010の優待アップグレード版のOffice2013を導入。日常的な使用環境はこれで整った。

2 Visual Studio Comminuty 2015の導入

さて開発ツールだが、個人ユーザなら無料で使用できるVisual Studio Community 2015を導入。(過去 Visual Studio Professional with MSDN を3回も購入した者としては、いい時代になったものだと思う。まあMSDNにはOSも付いているけど。)

これまで開発したプロジェクトをコンパイルするための保険にVisual Studio2010も入れたが、Visual Studio Community 2015ではVS2010のプロジェクトをそのまま読み込んでVS2010のライブラリセットを指定してコンパイルできるので、VS2010は不要かもしれない。

3 EBPocket for WinRTのWIndows8.1アプリへの移行

以前、VS2012でWindows8ストアアプリのEBPocket for WinRTを開発してリリースしたが、ストアアプリの将来性に疑問を感じて開発を凍結していた。

その後、VS2013ではWindows8.1とWindows Phone8.1のユニバーサルアプリが作れるようになり、VS2015では同一バイナリですべてのWindowsプラットフォームで動作するUWPが登場。あっという間に2世代も進んでしまった。

今回最初に行ったことは、Windows8ストアアプリのEBPocket for WinRTの当時のソースを、Visual Studio Community 2015でコンパイルすることである。

VS2012で作成したWindows8用のプロジェクトを読み込むと、Windows8.1に再ターゲットを求められる。EBPocketの本体のソースはWindows8.1に再ターゲットできたが、C++/CXで開発したWindowsランタイムライブラリ変換できない

仕方ないので新規プロジェクトでユニバーサルWindows8.1のWindowsランタイムコンポーネントを作り、ソースを一つ一つ追加。これでコンパイル&リンクしたところ、EBPocket for WinRTがWindows8.1アプリとして復活した。Windows10では全画面ではなく一つのウインドーで動くので、かなり使い勝手がよくなった気がする。(もちろん機能が少ないことを酷評されていることは承知しているが。)

4 ストアアプリの将来について

Windows8.1アプリになったといっても、Windows8.1ユニバーサルアプリとしてWindows Phone8.1版を追加するのは、アプリ一本をまるまる新規で開発するぐらいの工数がかかる。いっそUWPで単一のEBPocket for UWPを作った方がいいのではないか。

そう考えてUWPの新規プロジェクトを試してみると、Windows8.1ストアアプリにあったような「分割アプリ」「ハブアプリ」のようなテンプレートがない。要するにどんな解像度でも動くように、自分で様々な解像度にあった画面を用意しないといけないらしい。ここでまたやる気が萎えてしまった。

この1年くらいでWindows Phoneの新機種が日本でも発売されるようになったが、シェアが低いのは相変わらずで、「アプリがないからシェアが低い、シェアが低いからアプリが作られない」というジレンマから抜け切れていない。UWPも開発事例が少ないようで、笛吹けど踊らずの状態がまだ続くかもしれない。

やはりWindows Mobileに対する方針の迷走と、過去のアプリの互換性を切り捨てたことによる開発者離れがいまだに効いていると思う。懐かしいW-ZERO3の頃には、スマートフォンのシェア100%だったのだから。当時の有名アプリで今もWindows Phoneで開発が続いているのは青空子猫ぐらいじゃないか。

EBPocket for WinRTを再開するための開発環境の構築まではできた。この後やる気がでるかどうかは、まだなんとも言えない。Windows Phoneの実機はお安いようだが。。。

2016-07-18 EclipseからAndroid Studio に乗り換えた このエントリーを含むブックマーク このエントリーのブックマークコメント

Androidの開発環境は当初はEclipse+ADTプラグインだったが、現在はGoogle公式の開発環境はAndroid Studioになっており、ADTの更新は2015年末で終了している。Andoroid Studioに乗り換える必要を感じていたものの、NDKの移植がうまくいかないために、延び延びになっていた。

ところがGoogle さんからの一通のメールでAndroid Studioに移行せざるを得なくなった。

Android 向け Google Mobile Ads SDK の 6.4.1 以前のバージョンは、2016 年 9 月 15 日をもってサポートを終了させていただきます。

2016 年 9 月 15 日以降も引き続き広告を配信していただくには、Google Mobile Ads SDK を 7.0.0 以降のバージョンにアップグレードしてください。

SDKアップグレードするには、Play 開発者サービスの最新バージョン(バージョンは dependencies セクションで確認)を Gradle Build 設定ファイルに追加してください。次の例では v9.0 を追加しています。

apply plugin: 'com.android.application'

...

dependencies {

compile 'com.google.android.gms:play-services:9.0.2'

}

うーん、そうですか。EBPocket Freeも読書尚友 FreeもGoogle Mobile Ads SDK 6.4.1なので、バージョンアップしないと9/15以降広告収入が途絶えることになる。世の中の流れとしてAndroid Studio用以外の開発情報が少なくなっているので、この機会にAndroid Studioに乗り換えることにした。この作業が予想以上に大変だったので、忘備録として書いておくことにする。

1 プロジェクトのインポート

Android Studioには既存のEclipseのプロジェクトをインポートする機能があり、"Import project(Eclipse ADT,Gradle,etc.)"を実行するだけで簡単に取り込める。100% Javaの読書尚友はこれだけでOK。問題はNDKを使用しているEBPocketである。

2 NDKのコンパイルAndroid.mkで行う

Android Studioは1.3からNDKをサポートするようになったが、色々不完全でGradleのバージョン毎に設定方法が変わったりしている。jni/ディレクトリC/C++言語のソースを入れておけばAndroid.mkは不要でコンパイルしてくれることになっているが、これが曲者でどうしてもNDKのコンパイルが通らない。既存のAndroid.mkでNDKをコンパイルする方法を探したところ、次のページを見つけた。

Android StudioでNDKを使ったビルドをする - Qiita

ほぼこのページの説明通りで、既存のAndroid.mkでコンパイルできるようになった。Cソース内のデバックができるかどうか不明だが、とりあえずAndroid Studioへの移行に成功。

3 com.google.android.gms:play-servicesのバージョン問題

続いてGoogle Mobile Ads SDKのバージョンを6.4.1から最新版の9.0.2にしてみる。

  1. app/libs/GoogleAdMobAdsSdk-6.4.1.jar を削除する
  2. build.gradleに追加

build.gradle

defaultConfig {

...

minSdkVersion 9 // 9以上

...

}

dependencies {

...

// compile files('libs/GoogleAdMobAdsSdk-6.4.1.jar')

compile 'com.google.android.gms:play-services:9.0.2'

}

AndroidManifest.xml

<meta-data android:name="com.google.android.gms.version"

android:value="@integer/google_play_services_version" />

<activity

android:name="com.google.android.gms.ads.AdActivity"

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />

main_pager.xml

【変更前】

xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"

【変更後】

xmlns:ads="http://schemas.android.com/apk/res-auto"

【変更前】

<com.google.ads.AdView

android:id="@+id/adView"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

ads:adSize="SMART_BANNER"

ads:adUnitId="....."

ads:loadAdOnCreate="true" />

【変更後】

<com.google.android.gms.ads.AdView

android:id="@+id/adView"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

ads:adSize="SMART_BANNER"

ads:adUnitId="....."

/>

なぜか次のエラーが。

error retrieving app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.0.0/res/values-v23/values-v23.xml

どうもcom.google.android.gms:play-servicesが8.4.0以上だと、 appcompat-v7の23.0.0が必要らしい。appcompatは使っていないので、素直にバージョンを下げる。

compile 'com.google.android.gms:play-services:9.0.2'

compile 'com.google.android.gms:play-services:8.3.0'

4 multiDexEnabled

実機でデバッグもできたので、Signed APKを作ろうとすると、またまたエラーに。

Error:The number of method references in a .dex file cannot exceed 64K.

Learn how to resolve this issue at

https://developer.android.com/tools/building/multidex.html

メソッド数が64Kを超えているのでmultiDexEnabledにしろと。こんな感じで解決

build.gradle:

buildToolsVersion "23.0.2"

...

defaultConfig {

...

// Enabling multidex support.

multiDexEnabled true

}

dependencies {

compile 'com.android.support:multidex:1.0.0'

}

AndroidManifest.xml:

<application

...

android:name="android.support.multidex.MultiDexApplication">

</application>

5 gradle.properties

これで終わりかと思ったら、Android Studioのheapサイズ不足でAPKが作れない。multiDexEnabledにするとheapが余分にいるらしい。gradle.propertiesに次の記述を追加する。

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m

これでようやくSigned APKが作成できた。

Android Studio を使い始めると、Eclipseより便利なところも不便なところも両方あるが、なにしろGoogleの開発速度が異様に速いので、問題点は急速に解決されることだろう。継続的なサポートのためには、なるべくAndroid Studioに移行することが望ましい。

Android Studio2.1になってエミュレータの速度が向上して実機以上の速度で動くようになった。これだけでも非常に開発が捗るというものだ。

2016-05-23 読書尚友 横組み、注記付き、etc このエントリーを含むブックマーク このエントリーのブックマークコメント

読書尚友は次版の1.46で基本的に青空文庫の注記に(ほぼ)完全対応になります。

左にルビ

f:id:hishida:20160523123612p:image

横組み

f:id:hishida:20160523123608p:image

注記付き

f:id:hishida:20160523123603p:image

底本では

f:id:hishida:20160523123559p:image

他に、上付き小文字、下付き小文字、字詰め、左傍線、左傍点に対応した。

2016-05-18 読書尚友 割り注 このエントリーを含むブックマーク このエントリーのブックマークコメント

読書尚友の進捗、割り注対応作業中。やりはじめると割り注の中に色々な注記が現れるので対応が難しい。

f:id:hishida:20160518190601p:image

f:id:hishida:20160518190608p:image

f:id:hishida:20160518190605p:image

これができれば、残りは横組み、上付き小文字、下付き小文字ぐらいだと思う。ここまで来たので、青空文庫の注記完全対応を目指して頑張りたい。

2016-05-15 読書尚友 文字サイズ、アクセント分解、罫囲み このエントリーを含むブックマーク このエントリーのブックマークコメント

読書尚友は青空文庫の注記の対応を増やしました。

  • アクセント分解

f:id:hishida:20160515174913p:image

青空文庫テキストは、

〔Le vent se le`ve, il faut tenter de vivre.〕

[#地付き]〔PAUL VALE'RY〕

[#3字下げ]序曲[#「序曲」は中見出し]

アクセント分解というのは、アクセント付き記号を〔〕内でテキストで表現する記法だが、Unicodeの注記より短く書けるので多用されている。

  • 文字サイズと罫囲み

f:id:hishida:20160515174917p:image

文字サイズは3段まで対応した。

罫囲みはブロック型にも対応している。