- 投稿日:2019-11-15T21:26:29+09:00
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 さん
資料:https://speakerdeck.com/mhidaka/android-dev-summit-2019-conference-overview-and-keynote-sessionAndroid Studio 4.0について
@wasabeef_jp さん
資料:https://speakerdeck.com/wasabeef/whats-new-android-studio-4-dot-0-jaMotion Editorについて
@mochico さん
資料:https://speakerdeck.com/mochico/how-to-motion-editor-report-from-android-dev-summit-2019
CameraXについて
takasy さん
資料:https://docs.google.com/presentation/d/19v5_MrMQvtlrQrE7PXy8dZi7h_iFV0kFwQaJaXt5wEg/edit#slide=id.pJetpack Composeどうなの?
@yanzm さん
資料:https://speakerdeck.com/yanzm/jetpack-compose-dounafalse-android-dev-summit-2019bao-gao-huiRoomとCoroutines
@yuichi_araki さん
資料:https://docs.google.com/presentation/d/1AYKOriaW0MhScn6ODBvxaQpbY8k9jTw8ENLudz1f6Tw/edit#slide=id.p最後に
LINEのオフィスとってもきれいでした!
会場準備等ありがとうございました。ただのまとめですいません。@リンクはQiitaのものです。Twitterリンクではないです。
- 投稿日:2019-11-15T21:20:03+09:00
Android Dev Summit 2019 Extended Tokyo メモ
Android Dev Summit
GoogleのAndroid "開発者向け" のカンファレンス
Android Dev Summit 2019700参加者
- 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 TestingAPI Feedback
SDK Target N - 117.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()
- 投稿日:2019-11-15T17:32:08+09:00
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.gradleapplicationVariants.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.gradleapplicationVariants.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を入れたいような気もするので,そのうち追加します.
(これに関してはぐぐるといっぱいでてきますが)---///
- 投稿日:2019-11-15T17:24:20+09:00
とりあえず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>を変更すれば表示が切り替わる
おわり
- 投稿日:2019-11-15T17:23:50+09:00
Android でパスワード表示/非表示できる EditText を実装する
概要
こういうフォームを実装します。
「Android パスワード 表示 非表示」のようなキーワードでググると結構ヒットするのですが、
MATERIAL DESIGN ではなく
android.support.design.widget.TextInputLayout
の内容が多かったので書き残しておきます。手順
1.プロジェクトレベルの build.gradle に以下を追加します(コチラを見るのが確実です)
build.gradleallprojects { repositories { google() jcenter() } }2.モジュールレベルの build.gradle に以下を追加します(コチラを見るのが確実です)
build.gradledependencies { 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 のスタイルを指定している部分で、
OutlinedBox
とFilledBox
があります。
(OutlinedBox.Dense
とFilledBox.Dense
もあるようですが違いがわかりませんでした…)
それぞれ見た目は以下のようになります。
- OutlinedBox
- FilledBox
他にもいろいろとできるようなので 公式 MATERIAL DESIGN Text Fields をみてみてください?
- 投稿日:2019-11-15T16:23:29+09:00
しがない大学生がExpo(React Native)とfirebaseを使ってアプリ作ってみた
こんにちは、ウマシバ(@UMA_987)といいます。
時々ウェブアプリやアプリを作ってる大学二年生です。
今回初めてAndroidアプリを作ったのでその紹介です。
作ったアプリ
クリア時間割という時間割アプリをAndroid向けに作りました。
作った理由
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日費やすといったこともあったので次からは全体像を見て重要な部分からやっていけるようにしたいです。
最後に
今後もガンガン機能を追加して便利にしていくのでクリア時間割のインストールよろしくお願いします!
それでは、最後までお読みいただきありがとうございました。
- 投稿日:2019-11-15T02:23:23+09:00
Expo(React Native)とfirebaseを使ってAndroidアプリを作ってみた
こんにちは、ウマシバ(@UMA_987)といいます。
時々ウェブアプリやアプリを作ってる大学二年生です。
今回初めてAndroidアプリを作ったのでその紹介です。
作ったアプリ
クリア時間割という時間割アプリをAndroid向けに作りました。
作った理由
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日費やすといったこともあったので次からは全体像を見て重要な部分からやっていけるようにしたいです。
最後に
今後もガンガン機能を追加して便利にしていくのでクリア時間割のインストールよろしくお願いします!
それでは、最後までお読みいただきありがとうございました。
- 投稿日:2019-11-15T00:05:55+09:00
【Flutter】'initialCameraPosition != null' : is not true.が起こった時の解決策
なりゆき
以下のページを参照しながらコピペをしていると途中で画像のエラーが起きた。
Google公式Flutter用Google Mapsプラグインを一通り使ってみた解決方法
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), ), ), ), ); }結果