ブログトップ 記事一覧 ログイン 無料ブログ開設

Debian GNU/Linux 3.1 on PowerMac G4 このページをアンテナに追加 RSSフィード Twitter

2016-01-18 Android から Google Drive にアクセス時のエラーメッセージ このエントリーを含むブックマーク このエントリーのブックマークコメント

年末に Android から Google Drive にアクセスする方法を調べてみたのだけど、とりあえずは Google の QuickStart アプリを動かすことにした。

https://github.com/googledrive/android-quickstart


Android Studio でサクっと起動してアカウント選択画面が表示されたのだけど、アカウントを選択してもまたアカウント選択画面になって先に進まない…。

f:id:paraches:20160118145612p:image


ログには下記のメッセージが表示されている。

GoogleApiClient connection failed: ConnectionResult{statusCode=SIGN_IN_REQUIRED...

ググると stackoverflow のこんなページが見つかった

http://stackoverflow.com/questions/23736137/onconnectionfailed-geving-sign-in-required


けど、ちょっと違うかな〜と悩んでいたらピコン!と思い出した。

「アプリの OAuth 2.0 の設定してなかった…」

というわけで、Google Developer Console で OAuth 2.0 の設定をしたら問題は解決!

2016-01-09 Kotlin の Android Extensions でワーニング

[][]Kotlin の Android Extensions でワーニング 00:34 Kotlin の Android Extensions でワーニングを含むブックマーク Kotlin の Android Extensions でワーニングのブックマークコメント

Kotlin の Android Extensions を使うと findViewById から解放されて気持ち良くなれるのだけど、気が付いたら View の id の部分にこんなワーニングが出てる。

f:id:paraches:20160110003214p:image

Use properties from the build variant packages

気持ち悪いので調べてみたら

http://stackoverflow.com/questions/34107344/what-does-the-warning-use-properties-from-the-build-variant-packages-mean/34117173

ということだそうだ。


特に build bariants を増やしたりしていないので今回は main を指定すれば良いのかな。


というわけで、オリジナルの import の部分

import kotlinx.android.synthetic.activity_panorama.*

これを下記の様に修正してワーニングは消えました!

import kotlinx.android.synthetic.main.activity_panorama.*

2016-01-08 AndroidStudioのbuild.gradleに出るワーニング(エラー)

[][]AndroidStudioのbuild.gradleに出るワーニング(エラー) 18:07 AndroidStudioのbuild.gradleに出るワーニング(エラー)を含むブックマーク AndroidStudioのbuild.gradleに出るワーニング(エラー)のブックマークコメント

AndroidStudioをアップデートして、以前の設定をそのまま使うようにすると

default config cannot be applied to groovy.lang.closure

なんてワーニングが出て、なんともうざったい状態になることがある。

f:id:paraches:20160108180423p:image

これを解消する手順をメモ。


とりあえず、検索すると出てくるのはここ。

http://stackoverflow.com/questions/29133601/buildtypes-cannot-be-applied-to-groovy-lang-closure

ここでは問題は

buildTypes cannot be applied to groovy.lang.closure

になっているけど、原因は同じ。

設定で gradle の場所を指定しているところに、指定された gradle がないのが原因。

f:id:paraches:20160108175942p:image

たぶん、アップデート時に gradle もアップデートされて、本来ならそこへのパスが設定に書き込まれるのだろうけど、以前の設定をそのまま使うようにしたから見つからなくて困ってる。

というわけで、設定画面で現在の gradle の場所(ファイル)を指定しなおせば問題は解決。

f:id:paraches:20160108180230p:image

2015-07-03 AndroidStudioでgradleがキャッシュが壊れているというエラー このエントリーを含むブックマーク このエントリーのブックマークコメント

さっきまでちゃんとビルドできていたプロジェクト、急に gradle がエラーを出してビルドできなくなった…。

Error:org.gradle.api.internal.changedetection.state.DefaultFileCollectionSnapshotter$FileCollectionSnapshotImpl cannot be cast to org.gradle.api.internal.changedetection.state.OutputFilesCollectionSnapshotter$OutputFilesSnapshot
Possible causes for this unexpected error include:<ul><li>Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
<a href="syncProject">Re-download dependencies and sync project (requires network)</a></li><li>The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
<a href="stopGradleDaemons">Stop Gradle build processes (requires restart)</a></li></ul>In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

言われるままに AndroidStudio を終了して、念のために iMac を再起動して試みるも、やはり同じエラーが出て先に進めない。

ProjectをReBuildしたりしてもダメ!


というわけで、Google 先生に聞いてみたら教えてくれたのが以下のページ。

やはり安定の stackoverflow!

教えに従ってターミナルから {project dir}/.gradle/2.2.1 を削除。

念のために AndroidStudioを再起動してからプロジェクトを読み込んでビルドしてみると…無事エラーなしで終了!

良かった〜。

2015-03-16 AndroidStudioのGoogleMapテンプレートをkotlinで動かしてみた

最近 kotlin という言語の話を良く目にするので早速触ってみました。

今回やってみたのは Android Studio の Google Map テンプレートを kotlin にコンバートしてエミュレータで動作させるまでです。

ちなみに kotlinって何?って方は下記のページで確認してみてください。

kotlin のページ

チュートリアル

wikipedia

[][]Android Studio に kotlin のプラグインをインストール 23:25 Android Studio に kotlin のプラグインをインストールを含むブックマーク Android Studio に kotlin のプラグインをインストールのブックマークコメント

今回は Kotlin の下記のページを参考に、Android Studio を使って Android アプリを作成します。

まずは Android Studio に Kotlin のプラグインをインストールします。プラグインは一度インストールしてしまえば、2度目以降はインストールする必要ありません。

参考ページには .kt の拡張子のファイルを作成すれば、Android Studio がプラグインをインストールするかどうか確認してくれるとも書いてありますが、今回はAndroid Studio のコマンドを呼び出してプラグインをインストールします。

1. Android Studio の Preferences... メニューを開きます

f:id:paraches:20150316221759p:image


2. 左のリストから Plug-in を選択します

f:id:paraches:20150316222007p:image


3. 検索窓に kotlin と入力して、browse をクリックします

f:id:paraches:20150316222118p:image


4. 表示されたリストから Kotlin を選択、表示された install ボタンをクリックしてインストールを開始します

f:id:paraches:20150316222248p:image


5. ダイアログでは OK をクリックします

f:id:paraches:20150316222354p:image


6. インストールが終わると Restart Android Studio ボタンが表示されるので Close をクリックして表示されるダイアログで Restart ボタンをクリックして Android Studio を再起動します

f:id:paraches:20150316222533p:image

以上でプラグインのインストールは完了です。

[][]Android Studio のテンプレートにある Google Map を Kotlin で動かしてみる 23:25 Android Studio のテンプレートにある Google Map を Kotlin で動かしてみるを含むブックマーク Android Studio のテンプレートにある Google Map を Kotlin で動かしてみるのブックマークコメント

環境が整ったので、Android Studio のテンプレートにある Google Map を Kotlin にコンバートして動かしてみます。

まずは、Google Map のテンプレートでプロジェクトを新規作成します。

f:id:paraches:20150316223030p:image

ウイザートに従って…

f:id:paraches:20150316223202p:image


これで Java のプロジェクトが作成されました。

もちろんコードも Java です。


まずは、表示されている google_maps_api.xml の内容に従って api キーを取得して書き換えておきます。

(Kotlin は関係ない部分なので詳細は省略)

f:id:paraches:20150316231427p:image


api キーの書き換えが終わったら MainActivity.java を選択して表示します。

f:id:paraches:20150316231826p:image


次に [Code] メニューの [Convert Java File to Kotlin File] を実行します。

f:id:paraches:20150316224512p:image


サクっと MainActivity.java が MainActivity.kt になりました。簡単!

f:id:paraches:20150316224634p:image


アラートが表示されていますが、気にせずにプロジェクトを Kotlin 対応にします。

[Tools] メニューの [Kotlin] から [Configure Kotlin in Project] を実行します。

f:id:paraches:20150316224726p:image


ダイアログには [OK] と答えます。

f:id:paraches:20150316224835p:image


これでプロジェクトが Kotlin 対応になりました。

build.gradle に変更が加えられたので、画面に表示された [Sync Now] をクリックします。

f:id:paraches:20150316224953p:image


更に「Kotlin external annotations for Android SDK are not set for 'Android API 21 Platform' Set up Kotlin Android SDK annotations」と表示されるので、[Set up Kotlin Android SDK annotations] をクリックします。

f:id:paraches:20150316225048p:image


ここで MainActivity.kt を見ると「Kotlin file in Gradle Project should be under source root with name 'kotlin'」と表示されています。

(先ほどスルーしたアラートです)

f:id:paraches:20150316225228p:image


現在 MainActivity.kt は java フォルダに入っていますが、Kotlin の .kt ファイルは kotlin フォルダに入れなければなりません。

が、まだ kotlin フォルダがないので source root に kotlin フォルダを作成します。

app/src/main を選択して、コンテキストメニューの [New] から [Directory] を実行して kotlin フォルダを作成します。

f:id:paraches:20150316225400p:image


すると、先ほどのアラートの右に [Move file] が表示されるので、これをクリックすると MainActivity.kt ファイルが今作成した kotlin フォルダに移動します。

f:id:paraches:20150316225507p:image


以上で、プロジェクト及び MainActivity.java の Kotlin へのコンバートが終了しました。

f:id:paraches:20150316225628p:image


しかし、このままではまだ MainActivity.kt にエラーがあって実行できません。

f:id:paraches:20150316225722p:image


Double を渡すところに integer を渡しているのでこれを修正します。

f:id:paraches:20150316225806p:image


とりあえず、エラーは無くなったので早速実行です!

f:id:paraches:20150316225911p:image

ちゃんと、マップが表示されました〜!

[][]ちょっと Kotlinっぽく書き換えてみる 23:25 ちょっと Kotlinっぽく書き換えてみるを含むブックマーク ちょっと Kotlinっぽく書き換えてみるのブックマークコメント

自動でコンバートした状態でも問題なく動きますが、実はテンプレートのファイルが古い?為に deprecated なメソッドを呼んでいる箇所があります。

45行目の getMap() です。

今は getMap() でなく、非同期だけど返ってくる GoogleMap が null にならない、getMapAsync() を使うことになっています。

というわけで、この部分とここから呼び出される setUpMap を少し書き換えてみました。

    private fun setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the map.
        if (mMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            (getSupportFragmentManager().findFragmentById(R.id.map) as SupportMapFragment)
                .getMapAsync({(googleMap:GoogleMap) -> setUpMap(googleMap)})
        }
    }

    /**
     * This is where we can add markers or lines, add listeners or move the camera. In this case, we
     * just add a marker near Africa.
     * <p/>
     * This should only be called once and when we are sure that {@link #mMap} is not null.
     */
    private fun setUpMap(googleMap: GoogleMap) {
        mMap = googleMap
        googleMap.addMarker(MarkerOptions().position(LatLng(0.0, 0.0)).title("Marker"))
    }

これで、deprecated なメソッドはなくなって、getMapAsync() の呼び出しも Javaっぽくなくなりました。

もちろん、動作も問題ありません。

(!!がどうにも嫌だったのでこんな書き方になってますが…)


というわけで、GoogleMapテンプレートで作った地図アプリを Kotlin にコンバートして動かしてみました。

基本的に”自動”でコンバートしてくれるので、特に難しいところはありません。

あとは、位置情報を取得したり、画面を書き換えたり、ジオフェンスでアラート出したりする部分をガシガシ kotlin で書いてみると、その良さをもっともっと感じられると思います。