2014年12月20日土曜日

NullPointerException TimePicker.updateInputState

FATAL EXCEPTION: main
Process: XXXXXXXX, PID: 8966
java.lang.NullPointerException
    at android.widget.TimePicker.updateInputState(TimePicker.java:695)

Android 4.x系において、TimePickerを表示&操作すると上記エラーが発生する。

原因は不正確かもしれませんが、setVisibility(View.GONE)をアプリ開始時に適用したためではないかと推測しています。

ThemeをHolo又は無しに設定すれば上記エラーを回避することはできるが、見た目が不細工になり、不細工すぎて、端末利用者はTimePickerを操作できない。

Themeの変更により、上記エラーが回避できるということはバグが原因であろうと思います。今からでも遅くはないので直して欲しいです。

(参考)

2014年12月7日日曜日

Error inflating class fragment

Error inflating class fragment

回答は次のサイトに掲載されています。複数の原因があるということですね。
Error inflating class fragment

私の場合は、onCreateViewメソッドの時点において、activityを操作しようとしたため上記エラーが発生しました。

onAttachメソッドの時点においてactivityを取得できるため、onAttachメソッド以降はactivityを操作できると思い込みました。

正しくは、onActivityCreatedメソッド以降でactivityを取得&操作するようにしなければならないということですね。

では、何故onAttachメソッドの時点においてactivityが取得できてしまうのかは疑問が残る。

2014年11月9日日曜日

任意の1個のProjectを削除する

Android Studio tested on 0.8.14 beta & Windows

任意の1個のProjectを削除する
学習のために作成したProjectを削除したい場合がある。
Android Studioの起動直後の画面(「Welcome to Android Studio」の画面)において、削除したいProjectを選択し、キーボードのDeleteキーを押し下げる。

全てのProjectを削除した場合は、File > Reopen Project > Clear listを使う。

「Welcome to Android Studio」の画面から削除しても、ディスクにあるファイルは削除されない。表示を消去しただけである。
ファイルを削除したい場合は、Windowsのエクスプローラを使う。
(参考) How to delete a module in Android Studio

2014年6月29日日曜日

プロジェクトを、ライブラリとして、自分のアプリに組み込む

プロジェクトを、ライブラリとして、自分のアプリに組み込む

開発環境:Eclipse

google-play-services_lib等のプロジェクトを、(libsフォルダーにjarファイルを置くのでは無く、プロジェクトという形で)ライブラリとして、自分のアプリに組み込む話です。

自分のアプリのプロジェクトで、Project>Properties>Android>Library>Addをクリックし、Project Selection画面を表示させた場合、「google-play-services_lib」がリストに表示されない現象が発生しました。

次のサイトが参考になりました。
Android Test プロジェクトを実行すると NoClassDefFoundError

解決策 次の2通りある。
1 google-play-services_libのプロジェクトにおいて、Project>Properties>Android>Libraryの下の「Is Library」にチェックを付与する。
2 google-play-services_libのプロジェクト内の「project.properties」ファイル内に次の1行を書き込む。
android.library=true
このtrueの部分がfalseである場合、google-play-services_libプロジェクトをライブラリにすることはできない。

2014年5月18日日曜日

Nexus7の製造名を知る方法

Nexus7の製造名を知る方法

Factory Images for Nexus Devicesでは、Nexus7の機種毎に、使用するファイルが異なっている。

Codenames, Tags, and Build Numbersを見ると、Nexus7には、flo、deb、grouper及びtilapiaといった、複数の種類のdevicesが存在するようである。
他方で、Factory Images for Nexus Devicesでは、"nakasi"や"razor"といった分類方法もある。複数の分類方法を設けることに何の意味があるのだろうか、と疑問を持つのは果たして私だけだろうか?
(ツッコミ)そんな疑問を持つのはアンタだけや。

fastboot modeで確認する方法
Nexus7の電源を切り、Volume Downボタンを押しながらPowerボタンを押し下げて、Nexus7を起動する。すると、ドロイド君が横になっている画面が表示される。その画面の左下に小さい字でPRODUCT NAMEが表示されている。小さすぎて、読まれへんど!
虫眼鏡を使って読んで見ると、次のように書いてある。
PRODUCT NAME - grouper

Javaでコーディングする方法
次のとおりJavaでコーディングしてアプリを実行させる。
Log.d(TAG, "Build.DEVICE==" + Build.DEVICE);
Log.d(TAG, "Build.PRODUCT==" + Build.PRODUCT);
LogCatへの出力結果は次の通りである。
Build.DEVICE==grouper
Build.PRODUCT==nakasi

「PRODUCT」で出力される文字列が、出力する方法によって異なっている。むむむ!。
(ツッコミ)こういう用語に、製造事業者としての統一性を要求するのは難しいのだろうか。

(ボケた回答)
  1. もう、作ってもて、出荷してもたから、無理や!
  2. どうでも良いことだ。意味内容が理解できるので、問題にはならない。
  3. ハードウェアから見た名前と、ソフトウェアからみた名前であるので、違っていても問題にはならない。
  4. Buildクラスによる表示が正しい。このため、fastboot modeによる表示は、見られると恥ずかしいため、小さな文字にしました。
  5. 悔しかったら、自分で「PRODUCT」名を勝手に創作してみてください。
  6. Androidって、そんなもんです。受け入れてください。

2014年5月11日日曜日

Nexus7のAndroid versionを古いものに戻す

Nexus7のAndroid versionを古いものに戻す

開発環境: Windows 8 & Eclipse

実機のAndroidのversionを古いものに戻すことができれば、その古いversionでアプリの動作検証をすることができます。そういう意味で、実機を複数所持する必要が無くなります。Nexus7が開発者用端末であると呼ばれる由縁です。

Nexus 端末を出荷時の設定にリセットするに載っている手順は、利用者による設定やインストールしたアプリをリセットする手順であって、AndroidのversionをNexus7の新規購入時点のものに戻す手順ではなく、Androidのversionは変化しません。Nexus 7を他人に譲渡する時に実行する手順なのです。

下記に示す操作は、Windowsパソコンに例えると、Windowsパソコン購入時に添付されたリカバリ用のDVDを使って、Windowsパソコンを出荷時の設定にすることに似ています。なので、Nexus7のデータが全部消えてしまいますので、注意しましょう。

この操作にはAndroid SDKが必要であることを考えると、この操作はAndroid開発者が行うものであって、一般利用者が行うものでは無いと思われます。

古いバージョンに戻すとは言っても、Nexus7の新規購入時点のバージョンは機種依存しているため、そこに戻すことはできません。具体的にどのバージョンに戻せるのかはFactory Images for Nexus Devicesを参照してください。

手順
開発機とNexus7とをUSBコードでつなぐ等を行い、Android SDKのプログラムが動作する環境を整えておく。具体的には、例えば、EclipseのLogCatでNexus7の動作のログが表示できるようにしておく。環境を整えておくという意味なので、実際にEclipseを起動させておく必要は無い。

Factory Images for Nexus Devicesから、Factory Images "nakasi" for Nexus 7 (Wi-Fi) > 4.1.2 (JZO54K)を任意のフォルダーにdownloadする。
(参考)Nexus7の製造名を知る方法

解凍にはLhaca124を使えば良いでしょう、
ここではC:\nakasi-jzo54k\に解凍したものとします。

Windows8の場合、「Windowsシステムツール」の「コマンドプロンプト」をクリックして、「コマンドプロンプト」(黒い画面)を表示させる。
エクスプローラーでfastboot.exeファイルを1回クリックして、「パスのコピー」を実行します。fastboot.exeファイルはAndroid SDKフォルダーの下の\platform-tools\に有ります。
コピーした文字列を、Windowsの「メモ帳」に貼り付けて、(fastboot.exeの部分を除いた)パスの部分だけを「コピー」します。
「コマンドプロンプト」で次のとおり入力します。cdの次は半角スペースを入力します。cdはchange directoryという意味です。
cd 
「コマンドプロンプト」の左上端のアイコンをクリック > 編集 > 貼り付けによって、"cd "の後に、パスの文字列を貼り付けます。
そしてEnterキーを押します。
すると、プロンプトが、fastboot.exeファイルの存在するフォルダーに移動します。
念の為、この画面で、"fastboot"と入力&Enterして、fastbootが動くか確認します。

C:\nakasi-jzo54kフルダー内にimage-nakasi-jzo54k.zipファイルがありますが、このファイルは解凍しなくても良いです。下記のバッチファイルを見て分かるように、zipファイルを直接操作します。

バッチファイルの編集
"C:\nakasi-jzo54k\flash-all.bat"ファイルがありますので、そのファイルを「メモ帳」で開いて内容を編集します。「メモ帳」では改行がありませんが、HTML文書に貼り付けて見ると改行があるのがわかります。
下記の赤色で記した部分を書き込み、上書きします。

@ECHO OFF
:: Copyright 2012 The Android Open Source Project
::
:: Licensed under the Apache License, Version 2.0 (the "License");
:: you may not use this file except in compliance with the License.
:: You may obtain a copy of the License at
::
::      http://www.apache.org/licenses/LICENSE-2.0
::
:: Unless required by applicable law or agreed to in writing, software
:: distributed under the License is distributed on an "AS IS" BASIS,
:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
:: See the License for the specific language governing permissions and
:: limitations under the License.

PATH=%PATH%;"%SYSTEMROOT%\System32"
fastboot erase boot
fastboot erase cache
fastboot erase recovery
fastboot erase system
fastboot erase userdata
fastboot flash bootloader C:\nakasi-jzo54k\bootloader-grouper-3.41.img
fastboot reboot-bootloader
ping -n 10 127.0.0.1 >nul
fastboot -w update C:\nakasi-jzo54k\image-nakasi-jzo54k.zip

echo Press any key to exit...
pause >nul
exit

次の手順でNexus7内のデータが全部消えるため注意しましょう。

Building for devicesを読んだところ、次のように書いてあります。
fastboot modeによる起動
まず、Nexus7の電源を切ります。
そして、Nexus7がfastboot modeを使えるようにするため、Nexus7のVolume Downボタンを押しながらPowerボタンを押し、Nexus7を起動します。fastboot modeにすると、端末をflashさせるbootloaderを使うことができるのです(意味不明)。

bootloaderのロック解除
デフォルトではbootloaderはロックされています。
Nexus7の端末がfastboot modeになっているのを確認したら、開発端末(Windowsパソコン)の「コマンドプロンプト」から次のとおり入力し、bootloaderのロックの解除をしてください。
fastboot oem unlock[Enter]

Unlock bootloader
Nexus7に「Unlock bootloader?」という画面が表示されます。Volume Upボタン又はVolume Downボタンを押し下げて、「Yes」の項目を選択し、Powerボタンを押します。
これによる「コマンドプロンプト」のログは次のとおりです。

C:\*\sdk\platform-tools>fastboot oem unlock[Enter]
...
(bootloader) erasing userdata...
(bootloader) erasing userdata done
(bootloader) erasing cache...
(bootloader) erasing cache done
(bootloader) unlocking...
(bootloader) Bootloader is unlocked now.
OKAY [349.022s]
finished. total time: 349.023s

バッチファイルの実行
Windowsパソコンの「コマンドプロンプト」から次のとおり入力してください。
C:\nakasi-jzo54k\flash-all.bat
これによる「コマンドプロンプト」のログは次のとおりです。

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
C:\*\sdk\platform-tools\
C:\*\sdk\platform-tools>C:\nakasi-jzo54k\flash-all.bat[Enter]
erasing 'boot'...
OKAY [  0.987s]
finished. total time: 0.987s
******** Did you mean to fastboot format this partition?
erasing 'cache'...
OKAY [  1.507s]
finished. total time: 1.508s
erasing 'recovery'...
OKAY [  0.934s]
finished. total time: 0.934s
******** Did you mean to fastboot format this partition?
erasing 'system'...
OKAY [  1.112s]
finished. total time: 1.113s
******** Did you mean to fastboot format this partition?
erasing 'userdata'...
OKAY [  7.059s]
finished. total time: 7.059s
sending 'bootloader' (2092 KB)...
OKAY [  0.289s]
writing 'bootloader'...
OKAY [ 10.257s]
finished. total time: 10.546s
rebooting into bootloader...
OKAY [  0.020s]
finished. total time: 0.021s
archive does not contain 'boot.sig'
archive does not contain 'recovery.sig'
archive does not contain 'system.sig'
--------------------------------------------
Bootloader Version...: 3.41
Baseband Version.....: N/A
Serial Number........: 015d25687c601206
--------------------------------------------
checking product...
OKAY [  0.040s]
checking version-bootloader...
OKAY [  0.024s]
sending 'boot' (4896 KB)...
OKAY [  0.651s]
writing 'boot'...
OKAY [  0.747s]
sending 'recovery' (5240 KB)...
OKAY [  0.701s]
writing 'recovery'...
OKAY [  0.678s]
erasing 'system'...
OKAY [  1.442s]
sending 'system' (446268 KB)...
OKAY [ 57.518s]
writing 'system'...
OKAY [ 33.915s]
erasing 'userdata'...
OKAY [  7.367s]
formatting 'userdata' partition...
Creating filesystem with parameters:
    Size: 6453985280
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8048
    Inode size: 256
    Journal blocks: 24620
    Label:
    Blocks: 1575680
    Block groups: 49
    Reserved block group size: 391
Created filesystem with 11/394352 inodes and 52512/1575680 blocks
sending 'userdata' (102525 KB)...
writing 'userdata'...
OKAY [ 28.454s]
erasing 'cache'...
OKAY [  1.457s]
formatting 'cache' partition...
Creating filesystem with parameters:
    Size: 464519168
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 7088
    Inode size: 256
    Journal blocks: 1772
    Label:
    Blocks: 113408
    Block groups: 4
    Reserved block group size: 31
Created filesystem with 11/28352 inodes and 3654/113408 blocks
sending 'cache' (9052 KB)...
writing 'cache'...
OKAY [  3.828s]
rebooting...

finished. total time: 136.937s
Press any key to exit...

bootloaderのロック設定
Nexus7が起動し、画面には、Welcome画面が表示されますが、ロック設定を忘れてはいけないので、直ちに、電源を切ります。
そして、Nexus7のVolume Downボタンを押しながらPowerボタンを押し、Nexus7を起動します。ドロイド君が倒れている画面が表示されていることを確認します。
「コマンドプロンプト」から次のとおり入力し、bootloaderのロックをしてください。
fastboot oem lock[Enter]

これによる「コマンドプロンプト」のログは次のとおりです。
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
C:\*\sdk\platform-tools\
C:\*\sdk\platform-tools>fastboot oem lock[Enter]
...
(bootloader) Bootloader is locked now.
OKAY [ 10.495s]
finished. total time: 10.496s

Androidを起動する
ドロイド君が倒れている画面の右上にStartと表示されていることを確認して、Powerボタンを押します。
アカウント等の設定を済ませて、「設定」>「タブレット情報」>「Androidバージョン」を見ると「4.1.2」になっています。

2014年5月10日土曜日

♪programming 数え歌

♪programming 数え歌
ひとつ 人より バグがある
ふたつ 再び バグがある
みっつ 見つけた バグがある
よっつ よっぽど バグがある
いつつ いつもの バグがある
むっつ ムカツク バグがある
ななつ なつかしい バグがある
やっつ やっぱり バグがある
ここのつ ここにも バグがある
とうで とうとう 動かない
「とう」で、ようやく動かなくなるのであるから、堅牢で頑丈なのであろう。

2014年5月5日月曜日

Google Mobile Ads SDK

Google Mobile Ads SDK

開発環境:Eclipse

これまではAdMobについては、GoogleMobileAdsSdkAndroid.zip 6.4.1を使ってきましたが、もはや時代遅れとなってしまいました。Androidアプリは、August 1, 2014以降は、新規リリース版やアップデート版ではAdMob SDKを使えなくなってしまいます。

日本語による概要は次のとおり。
従来の「AdMob SDK」にいくつかの大幅な改良を加えた最新のバージョンを、「Google Mobile Ads SDK」と名称を変え、Google Play 開発者サービス 4.0 の一部としてご利用いただけます。
Google Mobile Ads SDK Downloadsの「Android (Google Play)」のタブを読みましょう。
すると、「Google Mobile Adsを読みなさい」とのことです。
これを読むと、「Set Up Google Play Services SDKを読め」と書いてあります。
すると、「Eclipseで、Window > Android SDK Managerをクリックして、Google Play servicesをインストールしなさい」と書いてあります。ので、そうしましょう。

また、Google Mobile Adsでは、「端末の次のフォルダーに、サンプルがあるので、使ってみなさい」とのことです。
<android-sdk>/extras/google-play-services/samples/ads
でも、実際に存在するのは、次の名前のフォルダーです。
\sdk\extras\google\google_play_services\samples\admob
むむむ!フォルダー名の付け方について、ドキュメントと実装とが異なりますが、正確性を要求するのは今は遠慮しておきましょう。
とにかく、このフォルダーをimportしましょう。とりあえず、この時点では、importするだけに留めておきます。そして、このimportしたサンプルを、この文書では「自分がこれから開発するアプリ」としておきます。

スタート ガイドを読みます。すると、「Set Up Google Play Services SDKを読め」と書いてあります。
そこには、次のように書いてあります。
If you are using Eclipse, import the library project into your workspace. Click File > Import, select Android > Existing Android Code into Workspace, and browse to the copy of the library project to import it.
この英語をメッチャ意訳すると、次のような感じです。
EclipseのPackage Explorerを使って、\sdk\extras\google\google_play_services\libproject\google-play-services_lib\フォルダーをimportしなさい。import先は、当然ながら、自分がこれから開発するアプリのプロジェクトが存在するworkspaceです。
そして、重要なのが、Package Explorerで、(このimportした)google-play-services_libプロジェクトを開いた状態にしておくということです。「Close Project」をしてはならないのです。物好きな人はClose Projectをしてみてください。そうすると、私が陥った罠に出会えます。
当然ながら、自分が開発するアプリのプロジェクトも開いた状態にしておきます。
(かつての)AdMob SDKであれば、自分のアプリのlibsフォルダーに.jarファイルをimportする方式だったのですが、Google Mobile Ads SDKの場合はlibsフォルダーを参照するのでは無く、google-play-services_libプロジェクトを参照する、という方式です。そういう意味で、libsフォルダーの中身は空っぽです。
なお、/libs/フォルダーにGoogleAdMobAdsSdk-6.4.1.jarファイルが存在する場合、それを削除してください。削除しない場合、エラーが発生します。
(このimportした)google-play-services_libプロジェクトを参照する手順は、スタート ガイドの「SDK の導入」の「1. Eclipse ワークスペースに Google Play 開発者サービス ライブラリ プロジェクトを追加、参照する」に書かれています。
これで、エラーを発生させることなくプロジェクトを再構築できるようになります。って、サンプルプロジェクトなので、当たり前じゃ!。
「当たり前じゃ!」と思うのは甘い。次のエラーが発生します。むむむ!
E/GooglePlayServicesUtil(11153): The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.
「なんでや?サンプルやろが?」という疑問を持つのは、今は遠慮しておきましょう。
解決策はGoogle Mobile Ads SDK に関するよくある質問に書かれています。ただし、このページの最下端右端にある言語設定をEnglishに設定してください。日本語では解決策は書かれていません。むむむ!
解決策は次のとおりです。
I keep getting the error 'The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.'
You can safely ignore this message. Your app will still fetch and serve banner ads.
とにかく、「無視すれば良い」ってことですね。って、「どこが解決策やねん」というツッコミを入れるのは、今は遠慮しておきましょう。
そして「なんで日本語版ではこの解決策は掲示されて無いねん」という疑問を持つのも、今は遠慮しておきましょう。


/GoogleAdsSampleActivity/res/values/strings.xml内に次の1行があります。
<string name="ad_unit_id">INSERT_YOUR_AD_UNIT_ID_HERE</string>
このINSERT_YOUR_AD_UNIT_ID_HEREの部分にユニット ID(AdMob パブリッシャー ID)を指定します。ユニット IDの形式は、ca-app-pub-XXXXXXXXXXXXXXXX/NNNNNNNNNN のような形式になります。


確認はしてませんが、google-play-services_libプロジェクトと、自分がこれから開発するアプリのプロジェクトにおけるandroid:minSdkVersionやandroid:targetSdkVersionは一致させておいた方が良いのかもしれません(知らんけど)。


提案的改良点
/GoogleAdsSampleActivity/res/layout/activity_banner_xml.xml内の
        ads:adSize="BANNER"を
        ads:adSize="SMART_BANNER"に変えた方が良いでしょう。


後は、サンプルプログラムを調べて、プログラムの仕方を学習していけばよろしゅうございます。


所感
Google Mobile Ads SDKの実装は、まるでパズルを解いているようだ。皆さん、楽しんでいますか?

2014年4月29日火曜日

♪僕らはみんな バグってる

僕らはみんな バグってる
バグっているから 動かない

僕らはみんな 無知ってる
無知っているから 止まるんだ

LogCatで アプリを 動かして見れば
真っ赤に 流れる エラーリスト

Official YouTube Application だって
YouTube Android Player API だって
自分のアプリだって

みんな みんな バグっているんだ
友達 なんだ


暖かい励ましのメッセージを頂きましたので紹介します。
「友達呼ばわりされて、困ります」(YouTubeアプリ開発者一同様)
「バグってるのは、あんただけや!」(同業他社様)
「★☆☆☆☆」(アプリの利用者様)

2014年3月2日日曜日

Locale.getDisplayCountry()

Locale.getDisplayCountry()

Locale.getDisplayCountry()には、引数の無いメソッドと、有るメソッドがありますが、その振る舞いについては、下記のとおりです。

Javaのコード
Locale l1 = Locale.KOREAN;//言語情報のみ。国情報を含まない。
Log.d(TAG, "l1.getCountry()==" + l1.getCountry());
Log.d(TAG, "l1.getDisplayCountry()==" + l1.getDisplayCountry());
Log.d(TAG, "l1.getDisplayCountry(l1)==" + l1.getDisplayCountry(l1));
Locale l2 = Locale.KOREA;//言語情報と国情報を含む
Log.d(TAG, "l2.getCountry()==" + l2.getCountry());
Log.d(TAG, "l2.getDisplayCountry()==" + l2.getDisplayCountry());
Log.d(TAG, "l2.getDisplayCountry(l2)==" + l2.getDisplayCountry(l2));

日本語を表示するように設定された端末で、上記コードを実行したログは次のとおりです。
l1.getCountry()==
l1.getDisplayCountry()==
l1.getDisplayCountry(l1)==
l2.getCountry()==KR
l2.getDisplayCountry()==大韓民国
l2.getDisplayCountry(l2)==대한민국

getDisplayCountry()の引数の無いメソッドを使うと、端末に設定された言語で表示されます。有るメソッドを使うと、引数に指定した言語で表示されます。

2014年1月11日土曜日

アプリ神社2014

アプリ神社2014

副題:アプリの信頼性を高めるイノベーショナルテクノロジー

プログラミングをしていると様々な不思議な出会いがあります。
非効率な設計やら、訳の分からん振る舞いやら、実装と異なる名前の付け方やら、意味不明な書き方のドキュメントやら、何の為に設けたのかわからんclassやら、無くても何の問題も生じない定数やfieldやら、不親切な情報開示やら、に出会うかもしれません(推測)。

相手がそう来るなら、こっちも真摯な態度で、非論理的に振る舞えば良いのではないでしょうか?
そうです!。プログラマーには「神仏に頼る」というチカラ強い武器があるのです。

私は拙作アプリ「夢チューブ」の参拝代行をアプリマーケティング研究所様に依頼しました。この参拝代行のイベント名は「アプリ神社2014」です。

私は、この参拝代行でバグ退散のお願いをすることとなっています。
「開発者にはバグを無くしたいという意思がある」という印象を関係者に与える、という尊い効能があります。数多くのバグを作成なさってこられた開発者様には特に有意義です。

当然ながら、参拝は第三者のために行うものでは無いので、周囲の目を気にせず、自己満足に浸るということも、あり、なのです。

反面、リスクもあります。「神様に頼るような依存心の強い奴だ」、「思考停止を選択したのか」、「バグがあった場合、神様の責任に転嫁しようとしている」と、本音を見透かされてしまうのです。

でも、ご安心下さい。知性と教養のある御仁からは、「こいつは暇な奴だ」と暖かく見守って頂けるハズです。そして、参拝に行って頂けるのは、暇な女子大生なのだそうです。暇な者同士で(中略)。

論理で構成されるプログラミングに対して、参拝という技法で対応することは、その開発者の資質に疑問を生じさせますが、その評価の判断材料は、開発者様の普段の振る舞いに依存しているのです。(この段落だけがまともなスタンス)

アプリ神社2014」による霊験あらたかな効能により、そこそこ、まずまず、ボチボチなアプリに発展することが期待されます。そして、結局、それ相応の評価が定着する、ということです。つまり、やってもやらんでも、どっちでも良(中略)

推測ですが、アプリマーケティング研究所は、参拝代行という名目で、開発者の願い(ニーズ)に関する情報を収集し、市場調査をしているのかもしれません。たぶん。知らんけど。もしそうだったとしたら、この研究所は偉大であるかもしれないし偉大でないかもしれないスゴい研究所なのかもしれません。わからんけど。英知を結集しても解決しない、神仏に頼らざるを得ない願いとは何なんでしょうかね。

上述のように多くの効能が期待されますので、「アプリ神社2014」に気が向いたら申請してみてはどうでしょうか。

キーワード:イノベーション、革新、信頼性の向上、論理的思考、最善の改善策

2014年1月3日金曜日

keytoolを使う

 keytoolを使う

詳細はAndroidアプリの署名<KeyStore Keytool AndroidDebugKey>に詳しく書かれている。
実際に難しいのは、Windowsにおけるコマンドの入力である。ので、その部分だけ書いておく。

引用
フィンガープリントを確認するには、「Windows」キーを押しながら「R」キーを押して「ファイル名を指定して実行」画面を開き、名前欄に「cmd」と入力し、「OK」をクリックして「コマンドプロンプト」画面を開き、「keytool -list」コマンドを入力します。「keytool」とだけ入力すると、「keytoolの使い方」が表示されます。 「keytool」コマンドを入力して「'keytool' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」と表示が出る場合は、JDKがインストールされていないか、keytoolまでのパスがとおっていないことが考えられます。keytoolはJDKインストールフォルダのbinフォルダ配下にあります。JREにはありません。(参考サイト:Java環境に手動でグローバルサインのルート証明書をインストールする方法)
Windowsの「コマンドプロンプト」画面のタイトルバーの左端のアイコンをクリックすれば、コマンド一覧が表示される。ここの「編集」コマンドを使いこなすようにすれば便利である。
以下は、Windowsの「コマンドプロンプト」画面における手作業によるコマンド入力である。長い文字列の入力には「編集」>「貼り付け」コマンドを活用すればよい。keystoreファイルが存在するディレクトリ名は、事前にエクスプローラで確認&取得しておけば良い。

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Users\****>keytool
'keytool' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

C:\Users\****>cd \

C:\>dir

C:\>cd program files

C:\Program Files>dir

C:\Program Files>cd java

C:\Program Files\Java>dir

C:\Program Files\Java>cd jre7

C:\Program Files\Java\jre7>dir

C:\Program Files\Java\jre7>cd bin

C:\Program Files\Java\jre7\bin>dir

C:\Program Files\Java\jre7\bin>keytool

C:\Program Files\Java\jre7\bin>keytool -list -v -keystore C:\Users\****\Document
s\Android\****\****\keystore
キーストアのパスワードを入力してください:[Enter]

*****************  WARNING WARNING WARNING  *****************
*キーストアに保存された情報の整合性は*
*検証されていません。整合性を検証するには*
*キーストアのパスワードを入力する必要があります。*
*****************  WARNING WARNING WARNING  *****************

キーストアのタイプ: ****
キーストア・プロバイダ: ****

キーストアには1エントリが含まれます

別名: ****
作成日: ****
エントリ・タイプ: ****
証明書チェーンの長さ: ****
有効期間の開始日: ****
証明書のフィンガプリント:****
         署名アルゴリズム名: ****
         バージョン: ****

C:\Program Files\Java\jre7\bin>

おしまい。

2014年1月1日水曜日

YouTubeScopes

YouTubeScopes内に定義されている、実際の値は次の通りです。

YouTubeScopes.YOUTUBE          == https://www.googleapis.com/auth/youtube
// This OAuth 2.0 access scope allows for full read/write access to the
// authenticated user's account.

YouTubeScopes.YOUTUBE_READONLY == https://www.googleapis.com/auth/youtube.readonly

YouTubeScopes.YOUTUBE_UPLOAD   == https://www.googleapis.com/auth/youtube.upload

YouTubeScopes.YOUTUBEPARTNER   == https://www.googleapis.com/auth/youtubepartner

YouTubeScopes.YOUTUBEPARTNER_CHANNEL_AUDITは私の環境では存在しませんでした。