20191115のAndroidに関する記事は8件です。

Android Dev Summit 2019 Extended Tokyoの登壇資料まとめときました。

Android Dev Summit 2019 Extended Tokyoに参加しました。

GDGさん主催のAndroid Dev Summit 2019 Extended Tokyoに行ってきたので、
発表してくださったみなさまの資料をまとめておきます。

Android Developer Summit 2019 Overview

@mhidaka さん
image.png
資料:https://speakerdeck.com/mhidaka/android-dev-summit-2019-conference-overview-and-keynote-session

Android Studio 4.0について

@wasabeef_jp さん
image.png
資料:https://speakerdeck.com/wasabeef/whats-new-android-studio-4-dot-0-ja

Motion Editorについて

@mochico さん
image.png

資料:https://speakerdeck.com/mochico/how-to-motion-editor-report-from-android-dev-summit-2019

CameraXについて

takasy さん
image.png
資料:https://docs.google.com/presentation/d/19v5_MrMQvtlrQrE7PXy8dZi7h_iFV0kFwQaJaXt5wEg/edit#slide=id.p

Jetpack Composeどうなの?

@yanzm さん
image.png
資料:https://speakerdeck.com/yanzm/jetpack-compose-dounafalse-android-dev-summit-2019bao-gao-hui

RoomとCoroutines

@yuichi_araki さん
image.png
資料:https://docs.google.com/presentation/d/1AYKOriaW0MhScn6ODBvxaQpbY8k9jTw8ENLudz1f6Tw/edit#slide=id.p

最後に

LINEのオフィスとってもきれいでした!
会場準備等ありがとうございました。

ただのまとめですいません。@リンクはQiitaのものです。Twitterリンクではないです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Android Dev Summit 2019 Extended Tokyo メモ

Android Dev Summit

GoogleのAndroid "開発者向け" のカンファレンス
Android Dev Summit 2019

700参加者

  • Modern Development
    • Android Studo
    • Jetpack
  • Modern Distribution Channek
  • Moderan OS

Conference Overview & Keynote Session

Keynote

Androidは開発者とユーザーをつなぐプラットフォーム
増えるプラットフォーム : Foldable Chromebook
APEX (Android Pony Express)

Google Associate Android Developer Certification - Kotlin

Play Store
App Bundle Testing

API Feedback
SDK Target N - 1

17.8MのPopUp Block
Google Play Protectの

Android Studio 4.0 最新アップデート

Support for Jetpack Compose
Motion Editor
Desugarring in D8 & R8
- Java 8のバックポート
Multi Preview
Multi Display
Build Speed
- ビルドのボトルネックがわかる
Google Map Emulator Integration
Proguard Editing
Live Layout Inspector

かんたんべんりなMotionEditorの使い方講座

MotionLayoutのtransitionをvisualize→Editorで動かせる/デバッグできる

What's new in CameraX

Camera2 APIのラッパー
使いやすさを重視

Usecase
- プレビュー
- 画像解析
- 画像キャプチャ
- (ビデオキャプチャ)

CameraView(ImagesAnalysis以外)

Jetpack Compose実際どうなの?

  • UIツールキット
  • Kotlin
  • minSdkVersion=21
  • 既存のコードと混ぜでいける...?
  • privateなAPIに依存しない
  • Material + animationsなUIにしたい
  • 再利用性の向上
  • 使うな危険

  • Composable Function

  • @Composableアノテーション

  • @Model

Jetpack Roomの最新情報が届きます!

  • Room2.2
  • N:Nのリレーション(Junction)
  • カラムのデフォルト値
  • インクリメンタルAPTに対応
  • Expand Projection
  • Kotlinコルーチン
    • 2.1.0~ suspendサポート
  • liveDataAll() , flowAll().asLiveData()
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gradleで任意のファイル名で.apkを無警告で書き出す (2019/11版)

TL;DR

AndroidのGradle Buildで出力される.apkのファイル名を好きに決めたかったので,何年か前にいろいろググってbuild.gradleを設定してあったのですが,最近のGradleのVersion UpでWarningが出るようになってしまいました...

なので,最新Verでも無警告で気持ちよく任意名の.apkを出力できるようにします.

環境

Android Studio : 3.5.2
Android Gradle Plugin Version : 3.5.2
Gradle Version : 5.4.1

何が問題だったか

もともとのbuild.gradleでは ↓ のような処理で.apkの名前を差し替えていましたが,
output.outputFile.nameの処理が内部でDeprecatedなAPIを使っているらしく,
API 'variantOutput.getPackageApplication()' is obsolete and has been replaced with 'variant.getPackageApplicationProvider()'.
という警告が出るようになっていました.
(replaceしろと言われましても,そもそもそんなAPI使っとりませんがな...)

app/build.gradle
applicationVariants.all { variant ->
    variant.outputs.all { output ->
        if (variant.name == 'release') {
            if (output.outputFile != null && output.outputFile.name.endsWith('.apk')) {
                outputFileName = "hoge-fuga-piyo.apk"
            }
        }
    }
}

しばらく放置してましたが,直すことにします.

できあがったもの

app/build.gradle
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        if (output.outputFileName.endsWith(".apk")) {
            switch (variant.name) {
                case "debug":
                    output.outputFileName = "DEBUG.apk"
                    break
                case "release":
                    output.outputFileName = "RELEASE.apk"
                    break
            }
        }
    }
}

これでBuild APKでもGenerage Signed APKでも好きな名前で.apkを書き出すことができるようになります.

さいごに

AndroidがGradle Buildに対応したころ,任意APK名とかそのうち公式で対応するでしょ,と思ってたんですが,いまだに無いのは解せんですよ.

TODO:

.apk名にVersion Nameを入れたいような気もするので,そのうち追加します.
(これに関してはぐぐるといっぱいでてきますが)

---///

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

とりあえずDaggerを動かしてみる&詰まったところの解決

はじめに

Daggerのことググってもとりあえず動かしたいくらいの解説があまりなかったので、とりあえず動く物を。
あと、インジェクションするオブジェクトにactivityを引数として渡さないといけない時の方法で詰まったのでそれも書きます。

ソースはこちら

Daggerについて

ググってください

Daggerの下準備

Gradle(app)に下記追加

// Dagger
implementation "com.google.dagger:dagger:$dagger_version"
annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
implementation "com.google.dagger:dagger-android-support:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
kaptTest "com.google.dagger:dagger-compiler:$dagger_version"
kapt "com.google.dagger:dagger-android-processor:$dagger_version"

Syncして完了

Injectするオブジェクトを作成

class Thermometer @Inject constructor(val activity: SecondActivity) {
    fun getTemperature(): String {
        return activity.getString(R.string.temperature)
    }
}

@Inject constructorが肝っぽい

string.xmlにtemperatureを追加

<string name="temperature">30℃</string>

Componentを作成

@Component
interface Room {
    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(activity: SecondActivity): Builder

        fun build(): Room
    }

    fun inject(activity: SecondActivity)
}

インジェクトされる側を作成

class SecondActivity : AppCompatActivity() {
    lateinit var binding: ActivitySecondBinding
    private val viewModel = SecondViewModel()
    private lateinit var room: Room

    @Inject
    lateinit var thermometer: Thermometer

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_second)

        room = DaggerRoom.builder().application(this).build()

        room.inject(this)

        viewModel.textView = thermometer.getTemperature()

        binding.textView.text = viewModel.textView
    }
}

完成

こんな感じでstring.xmlの内容が表示されてると思います。

activityの引き渡し

Componentに

@Component.Builder
interface Builder {
    @BindsInstance
     fun application(activity: SecondActivity): Builder

      fun build(): Room
}

があるが、Daggerでactivityを引数として入れる時に必要になる。
これがない場合、

SecondActivity cannot be provided without an @Inject constructor or from an @Provides-annotated method. This type supports members injection but cannot be implicitly provided.

というエラーが発生する。
基本的に、Daggerでインジェクションするオブジェクトの引数には@Inject等で値を入力されたものしか渡せないらしい。。。

ついでに

activityが必要ないタイプの例もMainActivityに書いてある。
AndroidManifestの

<intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

を変更すれば表示が切り替わる

おわり

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Android でパスワード表示/非表示できる EditText を実装する

概要

スクリーンショット 2019-11-15 12.39.17.png
スクリーンショット 2019-11-15 12.39.28.png

こういうフォームを実装します。

「Android パスワード 表示 非表示」のようなキーワードでググると結構ヒットするのですが、
MATERIAL DESIGN ではなく
android.support.design.widget.TextInputLayout
の内容が多かったので書き残しておきます。

手順

1.プロジェクトレベルの build.gradle に以下を追加します(コチラを見るのが確実です

build.gradle
allprojects {
    repositories {
        google()
        jcenter()
    }
}

2.モジュールレベルの build.gradle に以下を追加します(コチラを見るのが確実です

build.gradle
dependencies {
    implementation 'com.google.android.material:material:1.0.0'
}

3.EditTextを以下のようにします

activity_main.xml
<com.google.android.material.textfield.TextInputLayout
    style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="パスワード"
    app:passwordToggleEnabled="true">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>

以上で 概要 のようなフォームができます!簡単ですね!

補足

app:passwordToggleEnabled="true"

この部分が 目? のアイコンを表示するかどうか、です。

また

style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"

この部分は EditText のスタイルを指定している部分で、OutlinedBoxFilledBox があります。
OutlinedBox.DenseFilledBox.Dense もあるようですが違いがわかりませんでした…)
それぞれ見た目は以下のようになります。

  • OutlinedBox

スクリーンショット 2019-11-15 17.16.56.png

  • FilledBox

スクリーンショット 2019-11-15 17.17.45.png

他にもいろいろとできるようなので 公式 MATERIAL DESIGN Text Fields をみてみてください?

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

しがない大学生がExpo(React Native)とfirebaseを使ってアプリ作ってみた

こんにちは、ウマシバ(@UMA_987)といいます。

時々ウェブアプリやアプリを作ってる大学二年生です。

今回初めてAndroidアプリを作ったのでその紹介です。

作ったアプリ

クリア時間割という時間割アプリをAndroid向けに作りました。

クリア時間割
ClearTimeTable_feature_graphic_min_ver.png

作った理由

firebaseを使ってみたかったのと自分が欲しい機能を自由に追加できる時間割アプリが欲しかったのが理由です。

自分が作りたいものを作るって結構大事な気がしたのでこれを作ることに決めました。

アプリの機能

時間割機能

曜日と授業数で分けられている表形式の時間割がついています。

個人的に結構使いやすいUIにできたかなと思っているので気に入っています。

設定機能

当たり前と言えば当たり前なんですが時間割表示の設定機能も付けました。

月、水、土みたいな日にち飛ばした時間割も作れるのが特徴です。

クラウド保存

アカウント機能を付けて時間割をクラウド保存にしました。

これでスマホを買い替えたりしたときの移行が簡単になります。

firebaseを使ってみたいがために付けました。

クラウドでの保存はできませんがアカウントを作らなくても時間割機能自体は使えるようになっています。

使った技術は

今回のアプリ作成で使った主な技術を紹介します。

アプリ側

ReactNative

  • ウェブフレームワークReactと同じ書き方でAndroidとiOSアプリが書ける技術です。
  • アプリのUIとかは全部これで作られています。
  • 以前Reactを書いたことがあったのでこれを使いました。
  • ReactNative用のコンポーネントを使わなければいけない等多少Reactとの違いはありました。

Expo

  • ReactNativeでのアプリ開発をすごく便利にしてくれる技術です。
  • 自分のスマホにExpoアプリを入れれば即スマホ上でReactNativeアプリを動かせます
  • 他にもapkファイルのビルドなんかもやってくれます
  • ビルドの際にクラウドでやるのですがそれに一時間とかかかったりするのが欠点です。

Mobx

  • Reduxと同じでステートメント管理用のライブラリです
  • 前にReduxを使ってアプリを作ったのですがその時よりコード量を少なくかけました
  • 今回のような小さいアプリの場合はこちらの方が楽だと思いました

ReactNavigation

  • スクリーンの移動のために導入しているライブラリです。
  • 時間割画面から設定画面への移動といったことをこのライブラリでやっています

react-native-paper

  • ReactNativeでマテリアルデザインを簡単に作りたくて導入しました。
  • ネット上に情報量が少なくて結構大変でした。NativeBaseの方がネット上にたくさん情報があるので初心者のうちはNativeBaseを使うべきだったかなーと思いました。

firebase JavaScriptSDK

  • アプリ側でfirebaseと通信して操作するためのライブラリです。
  • React NativeでJavaScirpt版のSDKが使えるか不安でしたが使えました。対応しておいてくれたGoogleに感謝!
  • ただ一部電話での認証機能とかExpoでは使えない機能もあるようです。

以上がアプリ側の実装に使った技術です。

バックエンド

firebase

  • バックエンド全てをfirebaseでやりました。
  • 機能がとにかく豊富です!データの保存からユーザーの認証アプリのランディングページのホスティング等すべてfirebaseでできました。
  • データアクセスの制限などでちょろっとコードを書く必要がありましたがほとんどブラウザ上でいじるだけでバックエンドが完成しました。

その他

TypeScript

  • アプリ側、firebaseでちょろっと書いたコード、どちらともTypeScriptを使って書きました。まだまだ使いこなせてはいませんがそれでもVSCodeと合わせて使うととても便利でした。
  • 型があることで後からコードを見るときにすごく理解しやすくなりました。

Git/GitHub

  • バージョン管理のための技術とサービスです。VSCodeのGitLens拡張機能と一緒に使ってみたらすごく便利でした。
  • ブランチとかもう少し使いこなせるようになりたいです。

今後追加したい機能

せっかくクラウド保存にしたので時間割のウェブ版を作ってみたいと思っています。

あとは授業ごとに色をつけれるようにしたいですね。

今回の開発のふり返り

以前アプリを作ってからしばらく時間が空いていたからか、前はできていたことができなくなっていたことが結構あったのでショックを受けました。

例えば、以前は最初にどのようなものを作るかしっかりとまとめてから作っていたのに今回は見切り発車でやってしまったため作るものがあやふやになったりしました。

次は簡単にでもいいのでしっかりと最初に作るものを決めてやりたいです。

他にも細かいデザインの違い等に1日費やすといったこともあったので次からは全体像を見て重要な部分からやっていけるようにしたいです。

最後に

今後もガンガン機能を追加して便利にしていくのでクリア時間割のインストールよろしくお願いします!
ClearTimeTable_feature_graphic_min_ver.png
それでは、最後までお読みいただきありがとうございました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Expo(React Native)とfirebaseを使ってAndroidアプリを作ってみた

こんにちは、ウマシバ(@UMA_987)といいます。

時々ウェブアプリやアプリを作ってる大学二年生です。

今回初めてAndroidアプリを作ったのでその紹介です。

作ったアプリ

クリア時間割という時間割アプリをAndroid向けに作りました。

クリア時間割
ClearTimeTable_feature_graphic_min_ver.png

作った理由

firebaseを使ってみたかったのと自分が欲しい機能を自由に追加できる時間割アプリが欲しかったのが理由です。

自分が作りたいものを作るって結構大事な気がしたのでこれを作ることに決めました。

アプリの機能

時間割機能

曜日と授業数で分けられている表形式の時間割がついています。

個人的に結構使いやすいUIにできたかなと思っているので気に入っています。

設定機能

当たり前と言えば当たり前なんですが時間割表示の設定機能も付けました。

月、水、土みたいな日にち飛ばした時間割も作れるのが特徴です。

クラウド保存

アカウント機能を付けて時間割をクラウド保存にしました。

これでスマホを買い替えたりしたときの移行が簡単になります。

firebaseを使ってみたいがために付けました。

クラウドでの保存はできませんがアカウントを作らなくても時間割機能自体は使えるようになっています。

使った技術は

今回のアプリ作成で使った主な技術を紹介します。

アプリ側

ReactNative

  • ウェブフレームワークReactと同じ書き方でAndroidとiOSアプリが書ける技術です。
  • アプリのUIとかは全部これで作られています。
  • 以前Reactを書いたことがあったのでこれを使いました。
  • ReactNative用のコンポーネントを使わなければいけない等多少Reactとの違いはありました。

Expo

  • ReactNativeでのアプリ開発をすごく便利にしてくれる技術です。
  • 自分のスマホにExpoアプリを入れれば即スマホ上でReactNativeアプリを動かせます
  • 他にもapkファイルのビルドなんかもやってくれます
  • ビルドの際にクラウドでやるのですがそれに一時間とかかかったりするのが欠点です。

Mobx

  • Reduxと同じでステートメント管理用のライブラリです
  • 前にReduxを使ってアプリを作ったのですがその時よりコード量を少なくかけました
  • 今回のような小さいアプリの場合はこちらの方が楽だと思いました

ReactNavigation

  • スクリーンの移動のために導入しているライブラリです。
  • 時間割画面から設定画面への移動といったことをこのライブラリでやっています

react-native-paper

  • ReactNativeでマテリアルデザインを簡単に作りたくて導入しました。
  • ネット上に情報量が少なくて結構大変でした。NativeBaseの方がネット上にたくさん情報があるので初心者のうちはNativeBaseを使うべきだったかなーと思いました。

firebase JavaScriptSDK

  • アプリ側でfirebaseと通信して操作するためのライブラリです。
  • React NativeでJavaScirpt版のSDKが使えるか不安でしたが使えました。対応しておいてくれたGoogleに感謝!
  • ただ一部電話での認証機能とかExpoでは使えない機能もあるようです。

以上がアプリ側の実装に使った技術です。

バックエンド

firebase

  • バックエンド全てをfirebaseでやりました。
  • 機能がとにかく豊富です!データの保存からユーザーの認証アプリのランディングページのホスティング等すべてfirebaseでできました。
  • データアクセスの制限などでちょろっとコードを書く必要がありましたがほとんどブラウザ上でいじるだけでバックエンドが完成しました。

その他

TypeScript

  • アプリ側、firebaseでちょろっと書いたコード、どちらともTypeScriptを使って書きました。まだまだ使いこなせてはいませんがそれでもVSCodeと合わせて使うととても便利でした。
  • 型があることで後からコードを見るときにすごく理解しやすくなりました。

Git/GitHub

  • バージョン管理のための技術とサービスです。VSCodeのGitLens拡張機能と一緒に使ってみたらすごく便利でした。
  • ブランチとかもう少し使いこなせるようになりたいです。

今後追加したい機能

せっかくクラウド保存にしたので時間割のウェブ版を作ってみたいと思っています。

あとは授業ごとに色をつけれるようにしたいですね。

今回の開発のふり返り

以前アプリを作ってからしばらく時間が空いていたからか、前はできていたことができなくなっていたことが結構あったのでショックを受けました。

例えば、以前は最初にどのようなものを作るかしっかりとまとめてから作っていたのに今回は見切り発車でやってしまったため作るものがあやふやになったりしました。

次は簡単にでもいいのでしっかりと最初に作るものを決めてやりたいです。

他にも細かいデザインの違い等に1日費やすといったこともあったので次からは全体像を見て重要な部分からやっていけるようにしたいです。

最後に

今後もガンガン機能を追加して便利にしていくのでクリア時間割のインストールよろしくお願いします!
ClearTimeTable_feature_graphic_min_ver.png
それでは、最後までお読みいただきありがとうございました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Flutter】'initialCameraPosition != null' : is not true.が起こった時の解決策

なりゆき

以下のページを参照しながらコピペをしていると途中で画像のエラーが起きた。
Google公式Flutter用Google Mapsプラグインを一通り使ってみた

image.png

解決方法

initialCameraPositionがnullということなのでカメラの初期座標を設定する。

lib/main.dart
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        height: MediaQuery.of(context).size.height,
        width: MediaQuery.of(context).size.width,
        child: GoogleMap(
          onMapCreated: _onMapCreated,
          //以下に座標を追記
          initialCameraPosition: CameraPosition(
            target: LatLng(35.692558, 139.699530),
          ),
        ),
      ),
    );
  }

結果

最低限表示はされた。
image.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む