AndroidLint #DroidKaigi

Yukiya Nakagawa
Yukiya NakagawaMobile App Developer at ウォーターセル株式会社 / WaterCell Inc.
Android Lintで正しさ
を学ぼう
2015.02.18 DroidKaigi 2016
Yukiya Nakagawa / @Nkzn
ROOM:B 13:00-13:50
#DroidKaigiB
Who are you?
• Yukiya Nakagawa / @Nkzn
• ウォーターセル株式会社@新潟
• 農業向けサービス「アグリノート」
• エンジニア募集中です
• Androidは2009年からチマチマと
Recent Activity
• C89コミケ
• とびだそう!Androidプロ
グラミングレシピ
• https://techbooster.booth.pm/
• Android Lintネタ書いてました
Target
• まだAndroidプログラミングのベストプラク
ティスが分からない初学者
• Androidアプリの品質を表す指標がほしい

品質担当者
Agenda
• Android Lintとは
• 初学者がやりがちなミス
• もっと上を目指す人のために
• 品質指標としてのAndroid Lintを考える
Android Lintとは
Lintとは
Another HTML-lint HTMLの構文チェックツール
JSLint, JSHint, ESLint JavaScriptの構文チェックツール
textlint 日本語の構文チェックツール
lintとは、主にC言語のソースコードに対し、コンパイラより詳細かつ
厳密なチェックを行うプログラムである。
• 型の一致しない関数呼び出し
• 初期化されていない変数の参照
• 宣言されているが使われていない変数
• 同じ関数を参照しているが、戻り値を使う場合と使わない場合がある
• 関数が戻り値を返す場合と返さない場合がある
など、コンパイラではチェックされないが、バグの原因になるような曖
昧な記述についても警告される。
https://ja.wikipedia.org/wiki/Lint
Javaの場合?
Android Lintとは
• Google公式
• 222個のルール(ver25.0.4現在)
• Category, Severity, Priorityで分類される
• 結構手広い
• 不具合予備軍の検出
• ユーザビリティチェック
Category
カテゴリ名 チェックする内容
Correctness SDKの使い方の正しさ
Correctness:Messages Correctnessのうち、特にメッセージ
Security セキュリティ
Performance パフォーマンス(動作速度)
Usability ユーザビリティ(使い勝手)
Usability:Icons Usabilityのうち、特にアイコン
Usability:Typography Usabilityのうち、特に文字
Accessibility アクセシビリティ
Internationalization 国際化・多言語化
Bi-directional Text Right-to-Leftモードでの見た目
Severity
レベル 意味 アプリへの影響
Fatal 致命的 ビルドや実行に必ず失敗する
Error エラー
ビルドはできるが実行時エラー
を引き起こす可能性が高い
Warning 警告
動作はするが修正したほうが
より良いアプリになる
Information 情報
ほぼ問題ないが頭の片隅に
置いておいたほうがよい
Ignore 無視
問題があったとしても
検出しない
チェックできるファイルの種類
• https://android.googlesource.com/platform/
tools/base
• com.android.tools.lint.detector.api.Detector

https://android.googlesource.com/platform/tools/base/+/master/lint/libs/
lint-api/src/main/java/com/android/tools/lint/detector/api/Detector.java
1. Manifest file
2. Resource files, in alphabetical order by resource type
3. Java sources
4. Java classes
5. Gradle files
6. Generic files
7. Proguard files
8. Property files
Priority
• 1から10まで
• あまりあてにならない
どんな問題を解決するのか
お作法分かりづらい問題
https://twitter.com/konifar/status/698760224409169920
Android Way is どこ
https://twitter.com/konifar/status/698760496837603328
Googleによる正解集
(あるいはアンチパターン集)
Android Lint
事例紹介
Part 1. 初学者がやりがちなミス
Case 1. LinearLayoutに並べたビューが
表示されないのは何故?
(Orientation)
こんなコード書いてませんか
<LinearLayout

android:layout_width="match_parent"

android:layout_height="match_parent">

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="one" />

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="two" />

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="three" />

</LinearLayout>

何故かアイテムがひとつしか出ない・・・?
Orientation
• Summary: Missing explicit orientation
• Priority: 2 / 10
• Severity: Error
• Category: Correctness
何故いけないのか?
デフォルトのorientationはhorizontal
こう書きましょう
<LinearLayout

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="one" />

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="two" />

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="three" />

</LinearLayout>
Case 2: Fragmentが表示されない
こんなコード書いてませんか
@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_commit_transaction);



getSupportFragmentManager().beginTransaction()

.add(R.id.container, new MyFragment());

}
あれー? Fragmentが表示されないなー?
CommitTransaction
• Summary: Missing commit() calls
• Priority: 7 / 10
• Severity: Warning
• Category: Correctness
何故いけないのか?
• beginTransaction()から始まるメソッドチェーンは、
commit()が呼び出されてから描画処理に入ります
• そりゃcommit()を呼んでなきゃ何も表示されません
• DBのトランザクションみたいなイメージ
こう書きましょう
@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_commit_transaction);



getSupportFragmentManager().beginTransaction()

.add(R.id.container, new MyFragment())
.commit();

}
Case 3. SharedPreferenceが
保存されない
こんなコード書いてませんか
SharedPreferences pref =
PreferenceManager
.getDefaultSharedPreferences(this);

SharedPreferences.Editor editor = pref.edit();

editor.putLong("now", new Date().getTime());
pref.getLong("now", -1); // -1
SharedPreferencesに保存したはずの
データが取れないなあ
CommitPrefEdits
• Summary: Missing commit() on
SharedPreference editor
• Priority: 6 / 10
• Severity: Warning
• Category: Correctness
何故いけないのか?
• SharedPreferencesにデータを保存する場合、
実際に保存されるタイミングはcommit()のと
き
• そりゃcommit()を呼んでなきゃ何も表示されません
こう書きましょう
SharedPreferences pref =
PreferenceManager
.getDefaultSharedPreferences(this);

SharedPreferences.Editor editor = pref.edit();

editor.putLong("now", new Date().getTime());
editor.commit();
// consider using apply() instead
pref.getLong("now", -1); // 1455620005841
おまけ: commit()とapply()
• SharedPreferencesはアプリ内領域のXMLを読
み書きすることでデータを永続化している

/data/data/[applicationId]/shared_prefs/hoge.xml
Editor XML
Memory
Cache
commit()は待つ
apply()は待たない
こう書くとなおよい
SharedPreferences pref =
PreferenceManager
.getDefaultSharedPreferences(this);

SharedPreferences.Editor editor = pref.edit();

editor.putLong("now", new Date().getTime());
editor.apply();
// OR
// if(editor.commit()) {
// pref.getLong(“now”, -1); // 1455620005841
// }
Case 4: Toastが出ない
こんなコード書いてませんか
Toast.makeText(
this,
“this line is passed”,
Toast.LENGTH_LONG)
なんでだ、絶対にこの行を通ってるはずなのに!
なんでトーストが出ないんだ!!!!
ShowToast
• Summary: Toast created but not shown
• Priority: 6 / 10
• Severity: Warning
• Category: Correctness
こう書きましょう
Toast.makeText(
this,
“this line is passed”,
Toast.LENGTH_LONG).show()
Case 5: なんかこのOKボタン
押しづらくない?
こんなコード書いてませんか
<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@android:string/ok" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@android:string/cancel" />

</LinearLayout>
ButtonOrder
• Summary: Button order
• Priority: 8 / 10
• Severity: Warning
• Category: Usability
何故いけないのか?
• デザインガイドラインに書いてある

https://www.google.com/design/spec/components/dialogs.html#dialogs-specs
• 単にダイアログを閉じるだけの「キャンセル」のよう
なものは左、本来やりたかった操作を続ける「OK」
のようなものは右に置く
• 「削除」はネガティブなイメージなので左に置いてし
まいがちだけど右
こう書きましょう
<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@android:string/cancel" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@android:string/ok" />

</LinearLayout>
おまけ: 検出条件
1. targetSdkがAPI Level 14以上
• API Level 13まではOKが左で正しかった
2. ラベルが”OK”, “Cancel”, android.R.string.ok, android.R.string.cancelのいずれか
3. 親レイアウトの設定上、並びが明らか
• LinearLayoutかTableRowで、orientationがhorizontal
• RelativeLayoutで、toRightOf, toLeftOfの関係で順序が分かる
• RelativeLayoutで、alignParentLeft, alignParentRightの関係で順序が分かる
Case 6: このアプリ英語化して
こんなコード書いてませんか
<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="ユーザーを選択してください" />



<ImageView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:contentDescription="犬のアイコン"

android:src=“@drawable/ic_dog” />



<EditText

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint="入力してください" />
日本語が表示されるところを全部探して
英語に書き直す・・・? 1日じゃ無理だよ!
HardcodedText
• Summary: Hardcoded text
• Priority: 5 / 10
• Severity: Warning
• Category: Internationalization
検出対象
• レイアウトXML(res/layout/)
• android:text
• android:contentDescription
• android:hint
• android:prompt
• AndroidManifest.xml
• android:label
• メニューXML(res/menu/)
• android:title
何故いけないのか?
• 文字列リソースに抜き出したほうが総合的に
メリットが多い
• Java側で言語情報を切り替えることもできな
くもないがかなり煩雑
• リソースファイルの自動切り替えに頼ったほ
うが遥かに楽
こう書きましょう
<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text=“@string/select_a_user“ />



<ImageView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:contentDescription=“@string/dog_icon“

android:src=“@drawable/ic_dog” />



<EditText

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint=“@string/input_please“ />
おまけ
• デモ
• クイックフィックス
• 言語コードごとにstrings.xmlを用意した場
合のAndroid Studioの挙動
事例紹介
Interlude: konifar/droidkaigi2016
./gradlew lint
app/build/outputs/lint-results.html
👍
事例紹介
part2. もっと上を目指す人のために
Case 7: アプリが管理していた個人情報が
別のアプリから奪われた!
こんなコード書いてませんか
<!—- AndroidManifest.xml —->
<provider

android:name=".provider.MyContentProvider"

android:authorities="info.nkzn.mycontentprovider" />
ContentProviderを使うときはマニフェストに
書くんだろ? そんなこと知ってるよ!
ExportedContentProvider
• Summary: Content provider does not require
permission
• Priority: 5 / 10
• Severity: Warning
• Category: Security
何故いけないのか?
• 実は<provider>にはexportedというパラメータがあ
り、デフォルトでtrue
• 外部のアプリからでも content://hogehoge のよう
なURIでデータにアクセスできてしまう
• Dropboxが2011年にやらかしてた

http://codezine.jp/article/detail/6286
こう書きましょう
<!—- AndroidManifest.xml —->
<provider

android:name=".provider.MyContentProvider"

android:authorities=“info.nkzn.mycontentprovider"
android:exported=“false" />
※ minSdkVersion, targetSdkVersionが
  両方とも17以上なら、デフォルトでfalseになります
  http://developer.android.com/intl/ja/guide/topics/manifest/provider-element.html
Case 8: これ、何を入力する欄?
こんなコード書いてませんか
<EditText

android:layout_width="match_parent"

android:layout_height="wrap_content" />



<EditText

android:id=“@+id/phone_number"
android:hint=“電話番号を入力してください"
android:layout_width="match_parent"

android:layout_height="wrap_content" />



<EditText

android:id="@+id/pin"

android:hint=“PINコードを入力してください"
android:layout_width="match_parent"

android:layout_height="wrap_content" />



<EditText

android:id="@+id/site_url"

android:hint=“サイトのURLを入力してください"
android:layout_width="match_parent"

android:layout_height="wrap_content" />
電話番号を入れたいのに日本語キーボードが
出てきて切り替えるの面倒くさい・・・
何入れたらいいのか
わからない・・・
TextFields
• Summary: Missing inputType or hint
• Priority: 5 / 10
• Severity: Warning
• Category: Usability
何故いけないのか?
• ユーザーはhintを見て何を入力する欄なのかを
判断するので、無いと不便
• inputTypeを指定すれば適切なキーボードが現
れることが多いので、キーボードを切り替え
る手間が省けて便利
こう書きましょう
<EditText

android:hint="メモを入力してください"
android:layout_width="match_parent"

android:layout_height="wrap_content" />



<EditText

android:id=“@+id/phone_number"
android:hint=“電話番号を入力してください”
android:inputType=“phone”
android:layout_width="match_parent"

android:layout_height="wrap_content" />



<EditText

android:id="@+id/pin"

android:hint=“PINコードを入力してください”
android:inputType="numberPassword"

android:layout_width="match_parent"

android:layout_height="wrap_content" />



<EditText

android:id="@+id/site_url"

android:hint=“サイトのURLを入力してください”
android:inputType="textUri"
android:layout_width="match_parent"

android:layout_height="wrap_content" />
Case 9: やっぱりアイコンは
カラフルじゃなきゃ
こんなアイコン作ったことありませんか
色がついててみづらい
色がついててみづらい
IconColors
• Summary: Icon colors do not follow the
recommended visual style
• Priority: 6 / 10
• Severity: Warning
• Category: Usability:Icons
何故いけないのか
• マテリアルデザインの登場などもあり、ステータスバーや
ActionBarの色はアプリごとに鮮やかに変わるようになった
• アイコンと同系色の背景になったときに見づらくなってしまう
• 通知アイコンは白、アクションアイコンはグレーにしておけば、
なんとなく大体の色に合う
• というような話が developer.android.com/design に載っていた
ような気がするのだけれど、www.google.com/design に移った
ときにその辺の話がなくなってしまった気がする
こうしましょう
おまけ
// com.android.tools.lint.checks.IconDetector.java
for (int y = 0,
height = image.getHeight();
y < height; y++) {

for (int x = 0,
width = image.getWidth();
x < width; x++) {

int rgb = image.getRGB(x, y);

if ((rgb & 0xFF000000) != 0) {

int r = (rgb & 0xFF0000) >>> 16;

int g = (rgb & 0x00FF00) >>> 8;

int b = (rgb & 0x0000FF);

if (r != g || r != b) {
1pxずつ色を評価していて執念を感じた
Case 10: 文字は正しく使いましょう
こんなコード書いてませんか
<string name="continue_to_read">続きを読む...</string>
3点リーダ(…)の入れ方わかんないから
ピリオド3つでいいや
TypographyEllipsis
• Summary: Ellipsis string can be replaced with
ellipsis character
• Priority: 5 / 10
• Severity: Warning
• Category: Usability:Typography
何故いけないのか
• フォントによってはピリオドが都合よく…と見えてく
れるかどうかはわからない
• ISO-8859-1で…は”&#8230;”として定義されてお
り、各フォントも…が3点リーダとして見やすくなる
ようにしてくれているはず
• 用意されている文字はちゃんと使おうというスタンス
こう書きましょう
<string name=“continue_to_read”>続きを読む…</string>
<!—- または —->
<string name=“continue_to_read”>続きを読む&#8230;</string>
品質管理担当者の方へ:
品質指標として使ってみませんか
エンジニアの勝手な言い分
• Googleが「これやると良くないアプリになるよ」と言って
いるものを回避しているので、相対的にアプリの品質は上がっ
ていると言っていいのでは
• こんな重箱の隅を突くようなチェックを200項目以上も回避
するのはそれなりの経験値がないと難しい
• 正しくAndroid SDKを使えるように気を使いながら開発でき
ているという点は、品質上の成果として計上して、取引先や
経営層が評価してもらえると嬉しい
品質指標に使う場合
• 優先度が低いルールは事前に設定でignoreしておく(Bi-
directional Textカテゴリなど)
• 予算やスケジュールに応じて事前に「Fatal, Errorはすべ
て直す」「Warningは15件以内の検出」などの品質目標
を定めておく
• カテゴリ単位での採用・不採用を各プロジェクトごとに
定めるのもよいと思います
エンジニアの方へ:
abortOnErrorを切らないで
abortOnError,
checkReleaseBuilds
// build.gradle
android {
lintOptions {
abortOnError false
checkReleaseBuilds false
}
}
abortOnError:
危険度がErrorまたはFatalのルールに抵触したらビルドを中断する
checkReleaseBuilds:
リリースビルド時にFatalのルールに抵触したらビルドを中断する
趣味でやってたり
プロトタイプならともかく
お仕事でやるときに
falseにするのよくないと思います
本当に対応しないルールだけ
ignoreしましょう
droidkaigi2016/app/build.gradle
lintOptions {
abortOnError false
disable 'InvalidPackage'
}
😡
さいごに
• Android Studioがソースコードに黄色いのと
か赤いのとか付けてたら、マウスオーバーし
て何が起きてるか見てね!
• すべてのルールを倒したら胸を張ろう
• Android Lintと俺達の戦いはこれからだ!
ご清聴ありがとうございました
参考文献
• lint | Android Developers

http://developer.android.com/intl/ja/tools/help/lint.html
• Improving Your Code with lint | Android Developers

http://developer.android.com/intl/ja/tools/debugging/improving-w-lint.html
• Android Lint - Android Tools Project Site

http://tools.android.com/tips/lint
• Writing a Lint Check - Android Tools Project Site

http://tools.android.com/tips/lint/writing-a-lint-check
• platform_tools_base

https://android.googlesource.com/platform/tools/base
• LintOptions - Android Plugin 1.5.0 DSL Reference

http://google.github.io/android-gradle-dsl/current/
com.android.build.gradle.internal.dsl.LintOptions.html
1 of 89

Recommended

DroidKaigi2016 windows環境での効率的なアプリ開発手法 by
DroidKaigi2016 windows環境での効率的なアプリ開発手法DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法tkawashita
8.9K views45 slides
パーミッションモデルの過渡期への対応 by
パーミッションモデルの過渡期への対応パーミッションモデルの過渡期への対応
パーミッションモデルの過渡期への対応ak_shio_555
10.2K views40 slides
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2) by
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)Kengo Suzuki
13K views85 slides
Android Dev Tools Knowledge by
Android Dev Tools KnowledgeAndroid Dev Tools Knowledge
Android Dev Tools KnowledgeShinobu Okano
12.3K views71 slides
Android,Brillo,ChromeOS by
Android,Brillo,ChromeOSAndroid,Brillo,ChromeOS
Android,Brillo,ChromeOSl_b__
5.7K views26 slides
20150425 DroidKaigi つかえるGradleプロジェクトの作り方 by
20150425 DroidKaigi つかえるGradleプロジェクトの作り方20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方Makoto Yamazaki
22.7K views23 slides

More Related Content

What's hot

minneにおけるテスト〜リリース〜リリース後にやっている事の紹介 by
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介Masataka Kono
8.6K views66 slides
Go MobileでAndroidアプリ開発 by
Go MobileでAndroidアプリ開発Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発Takuya Ueda
32.8K views79 slides
絶対落ちないアプリの作り方 by
絶対落ちないアプリの作り方絶対落ちないアプリの作り方
絶対落ちないアプリの作り方Fumihiko Shiroyama
52.9K views124 slides
用途に合わせたアニメーションの実装方法 by
用途に合わせたアニメーションの実装方法用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法Takao Sumitomo
18K views50 slides
Androidアプリのストレージ戦略 by
Androidアプリのストレージ戦略Androidアプリのストレージ戦略
Androidアプリのストレージ戦略Masahiro Hidaka
8.1K views53 slides
Android 6.0 Marshmallow App Permissions 実践編 by
Android 6.0 Marshmallow App Permissions 実践編Android 6.0 Marshmallow App Permissions 実践編
Android 6.0 Marshmallow App Permissions 実践編Kenichi Kambara
2.5K views22 slides

What's hot(20)

minneにおけるテスト〜リリース〜リリース後にやっている事の紹介 by Masataka Kono
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
Masataka Kono8.6K views
Go MobileでAndroidアプリ開発 by Takuya Ueda
Go MobileでAndroidアプリ開発Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発
Takuya Ueda32.8K views
絶対落ちないアプリの作り方 by Fumihiko Shiroyama
絶対落ちないアプリの作り方絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Fumihiko Shiroyama52.9K views
用途に合わせたアニメーションの実装方法 by Takao Sumitomo
用途に合わせたアニメーションの実装方法用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法
Takao Sumitomo18K views
Androidアプリのストレージ戦略 by Masahiro Hidaka
Androidアプリのストレージ戦略Androidアプリのストレージ戦略
Androidアプリのストレージ戦略
Masahiro Hidaka8.1K views
Android 6.0 Marshmallow App Permissions 実践編 by Kenichi Kambara
Android 6.0 Marshmallow App Permissions 実践編Android 6.0 Marshmallow App Permissions 実践編
Android 6.0 Marshmallow App Permissions 実践編
Kenichi Kambara2.5K views
DroidKaigi 2019 シームレスに遷移可能な画面を他のアプリに提供する方法 by Takaki Hoshikawa
DroidKaigi 2019 シームレスに遷移可能な画面を他のアプリに提供する方法DroidKaigi 2019 シームレスに遷移可能な画面を他のアプリに提供する方法
DroidKaigi 2019 シームレスに遷移可能な画面を他のアプリに提供する方法
Takaki Hoshikawa3.3K views
僕がAndroid開発する時にちょっと便利だと思うtips by Masataka Kono
僕がAndroid開発する時にちょっと便利だと思うtips僕がAndroid開発する時にちょっと便利だと思うtips
僕がAndroid開発する時にちょっと便利だと思うtips
Masataka Kono3.1K views
Android lint-srp-practice by cch-robo
Android lint-srp-practiceAndroid lint-srp-practice
Android lint-srp-practice
cch-robo8K views
【ヒカ☆ラボ】 dely株式会社 梅森 翔氏 登壇資料 20171121 by leverages_event
【ヒカ☆ラボ】 dely株式会社 梅森 翔氏 登壇資料 20171121【ヒカ☆ラボ】 dely株式会社 梅森 翔氏 登壇資料 20171121
【ヒカ☆ラボ】 dely株式会社 梅森 翔氏 登壇資料 20171121
leverages_event2.4K views
Android Studioの魅力 by Keiji Ariyama
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
Keiji Ariyama15.1K views
2015年のAndroidアプリ開発入門 - ABCD 2015 Kanazawa by Keiji Ariyama
2015年のAndroidアプリ開発入門 - ABCD 2015 Kanazawa2015年のAndroidアプリ開発入門 - ABCD 2015 Kanazawa
2015年のAndroidアプリ開発入門 - ABCD 2015 Kanazawa
Keiji Ariyama2K views
What is tested by pre-launch (security) reports? by ak_shio_555
What is tested by pre-launch (security) reports?What is tested by pre-launch (security) reports?
What is tested by pre-launch (security) reports?
ak_shio_5553.5K views
あるゲームアプリケーションの構成とアップデートサイクル by Kentaro Iizuka
あるゲームアプリケーションの構成とアップデートサイクルあるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクル
Kentaro Iizuka18K views
開発を効率的に進めるられるまでの道程 by Takao Sumitomo
開発を効率的に進めるられるまでの道程開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程
Takao Sumitomo27.4K views
Android学ぶを君へ。生き抜くためのナレッジ共有 by Shinobu Okano
Android学ぶを君へ。生き抜くためのナレッジ共有Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有
Shinobu Okano61.2K views
Android Studio開発講座 by Keiji Ariyama
Android Studio開発講座Android Studio開発講座
Android Studio開発講座
Keiji Ariyama3.6K views
Android6.0 RuntimePermissionの実装と注意点 by Katsuki Nakatani
 Android6.0 RuntimePermissionの実装と注意点 Android6.0 RuntimePermissionの実装と注意点
Android6.0 RuntimePermissionの実装と注意点
Katsuki Nakatani8.7K views
Android App Development with Gradle & Android Studio by Soichiro Kashima
Android App Development with Gradle & Android StudioAndroid App Development with Gradle & Android Studio
Android App Development with Gradle & Android Studio
Soichiro Kashima3.2K views

Similar to AndroidLint #DroidKaigi

Androidレイアウトのスタンダードアプローチ by
AndroidレイアウトのスタンダードアプローチAndroidレイアウトのスタンダードアプローチ
AndroidレイアウトのスタンダードアプローチTakao Sumitomo
12.7K views47 slides
Realm meetup LT大会(Androidアプリへの適用経験談) by
Realm meetup LT大会(Androidアプリへの適用経験談)Realm meetup LT大会(Androidアプリへの適用経験談)
Realm meetup LT大会(Androidアプリへの適用経験談)Kenichi Kambara
1.6K views13 slides
20170705 apiをつくろう by
20170705 apiをつくろう20170705 apiをつくろう
20170705 apiをつくろうCData Software Japan
1.2K views51 slides
第一回Android training4desinger by
第一回Android training4desinger第一回Android training4desinger
第一回Android training4desingerKengo Suzuki
781 views23 slides
Android multiscreen by
Android multiscreenAndroid multiscreen
Android multiscreenKazuaki Ueda
1.6K views108 slides
ABC2012Spring 20120324 by
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324Tak Inamori
1.2K views60 slides

Similar to AndroidLint #DroidKaigi(20)

Androidレイアウトのスタンダードアプローチ by Takao Sumitomo
AndroidレイアウトのスタンダードアプローチAndroidレイアウトのスタンダードアプローチ
Androidレイアウトのスタンダードアプローチ
Takao Sumitomo12.7K views
Realm meetup LT大会(Androidアプリへの適用経験談) by Kenichi Kambara
Realm meetup LT大会(Androidアプリへの適用経験談)Realm meetup LT大会(Androidアプリへの適用経験談)
Realm meetup LT大会(Androidアプリへの適用経験談)
Kenichi Kambara1.6K views
第一回Android training4desinger by Kengo Suzuki
第一回Android training4desinger第一回Android training4desinger
第一回Android training4desinger
Kengo Suzuki781 views
Android multiscreen by Kazuaki Ueda
Android multiscreenAndroid multiscreen
Android multiscreen
Kazuaki Ueda1.6K views
ABC2012Spring 20120324 by Tak Inamori
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
Tak Inamori1.2K views
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract by Takuya Iwatsuka
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractSpring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Takuya Iwatsuka1.2K views
tweleve-factor-app_and_enterprise by Naoto TAKAHASHI
tweleve-factor-app_and_enterprisetweleve-factor-app_and_enterprise
tweleve-factor-app_and_enterprise
Naoto TAKAHASHI1.1K views
How to improve performance by Atsuko Fukui
How to improve performanceHow to improve performance
How to improve performance
Atsuko Fukui100 views
[Stack Overflow Dev Days 2015]Android 6.0 Marshmallow App Permissions 応用編 by Kenichi Kambara
[Stack Overflow Dev Days 2015]Android 6.0 Marshmallow App Permissions 応用編[Stack Overflow Dev Days 2015]Android 6.0 Marshmallow App Permissions 応用編
[Stack Overflow Dev Days 2015]Android 6.0 Marshmallow App Permissions 応用編
Kenichi Kambara1.7K views
Intalio japan special cloud workshop by Daisuke Sugai
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
Daisuke Sugai725 views
[potatotips #18] Android M Developer Preview & Wear 最新トピック by Kenichi Kambara
[potatotips #18] Android M Developer Preview & Wear 最新トピック[potatotips #18] Android M Developer Preview & Wear 最新トピック
[potatotips #18] Android M Developer Preview & Wear 最新トピック
Kenichi Kambara3K views
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring) by NTT DATA Technology & Innovation
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
The Twelve-Factor (A|M)pp with C# by Yuta Matsumura
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura569 views
技術選択とアーキテクトの役割 by Toru Yamaguchi
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi42K views
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1 by Takeshi Hirosue
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Takeshi Hirosue15.1K views
iPhone/Android アプリをまとめて省エネ開発する技術 by vaccho
iPhone/Android アプリをまとめて省エネ開発する技術iPhone/Android アプリをまとめて省エネ開発する技術
iPhone/Android アプリをまとめて省エネ開発する技術
vaccho1.6K views
ABC2016Spring Androidアプリ実装アンチパターン(暫定) by mokelab
ABC2016Spring Androidアプリ実装アンチパターン(暫定)ABC2016Spring Androidアプリ実装アンチパターン(暫定)
ABC2016Spring Androidアプリ実装アンチパターン(暫定)
mokelab5K views

More from Yukiya Nakagawa

Atomic Designは「マルチ」で真価を発揮する by
Atomic Designは「マルチ」で真価を発揮するAtomic Designは「マルチ」で真価を発揮する
Atomic Designは「マルチ」で真価を発揮するYukiya Nakagawa
2.4K views72 slides
Androidの入門書を書いたときに気にしたこと #NDS57 by
Androidの入門書を書いたときに気にしたこと #NDS57Androidの入門書を書いたときに気にしたこと #NDS57
Androidの入門書を書いたときに気にしたこと #NDS57Yukiya Nakagawa
1.2K views32 slides
React Nativeの光と闇 by
React Nativeの光と闇React Nativeの光と闇
React Nativeの光と闇Yukiya Nakagawa
9.2K views93 slides
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ by
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJアグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJYukiya Nakagawa
1.9K views60 slides
React Native Androidはなぜ動くのか by
React Native Androidはなぜ動くのかReact Native Androidはなぜ動くのか
React Native Androidはなぜ動くのかYukiya Nakagawa
11.2K views144 slides
CSS in JSの話 #friday13json by
CSS in JSの話 #friday13jsonCSS in JSの話 #friday13json
CSS in JSの話 #friday13jsonYukiya Nakagawa
1.1K views23 slides

More from Yukiya Nakagawa(20)

Atomic Designは「マルチ」で真価を発揮する by Yukiya Nakagawa
Atomic Designは「マルチ」で真価を発揮するAtomic Designは「マルチ」で真価を発揮する
Atomic Designは「マルチ」で真価を発揮する
Yukiya Nakagawa2.4K views
Androidの入門書を書いたときに気にしたこと #NDS57 by Yukiya Nakagawa
Androidの入門書を書いたときに気にしたこと #NDS57Androidの入門書を書いたときに気にしたこと #NDS57
Androidの入門書を書いたときに気にしたこと #NDS57
Yukiya Nakagawa1.2K views
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ by Yukiya Nakagawa
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJアグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ
Yukiya Nakagawa1.9K views
React Native Androidはなぜ動くのか by Yukiya Nakagawa
React Native Androidはなぜ動くのかReact Native Androidはなぜ動くのか
React Native Androidはなぜ動くのか
Yukiya Nakagawa11.2K views
CSS in JSの話 #friday13json by Yukiya Nakagawa
CSS in JSの話 #friday13jsonCSS in JSの話 #friday13json
CSS in JSの話 #friday13json
Yukiya Nakagawa1.1K views
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組み by Yukiya Nakagawa
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組みReact Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
Yukiya Nakagawa27.1K views
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi by Yukiya Nakagawa
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
Yukiya Nakagawa25.1K views
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetup by Yukiya Nakagawa
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetupAndroid Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
Yukiya Nakagawa2.7K views
僕らのデータ同期プラクティス by Yukiya Nakagawa
僕らのデータ同期プラクティス僕らのデータ同期プラクティス
僕らのデータ同期プラクティス
Yukiya Nakagawa24.2K views
Android再入門 〜Eclipseのことは忘れろ〜 by Yukiya Nakagawa
Android再入門 〜Eclipseのことは忘れろ〜Android再入門 〜Eclipseのことは忘れろ〜
Android再入門 〜Eclipseのことは忘れろ〜
Yukiya Nakagawa4.4K views
もう一度Kotlinの話をしよう #ndsmeetup4 by Yukiya Nakagawa
もう一度Kotlinの話をしよう #ndsmeetup4もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4
Yukiya Nakagawa1.9K views
アグリノートを支える技術 by Yukiya Nakagawa
アグリノートを支える技術アグリノートを支える技術
アグリノートを支える技術
Yukiya Nakagawa9K views
Coworking Business Forum in NIIGATA 2013 by Yukiya Nakagawa
Coworking Business Forum in NIIGATA 2013Coworking Business Forum in NIIGATA 2013
Coworking Business Forum in NIIGATA 2013
Yukiya Nakagawa1.4K views
ぼくのかんがえたふつうのあんどろいどかいはつ by Yukiya Nakagawa
ぼくのかんがえたふつうのあんどろいどかいはつぼくのかんがえたふつうのあんどろいどかいはつ
ぼくのかんがえたふつうのあんどろいどかいはつ
Yukiya Nakagawa2K views
Androidで使えるJSON-Javaライブラリ by Yukiya Nakagawa
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-Javaライブラリ
Yukiya Nakagawa16.3K views

Recently uploaded

SSH応用編_20231129.pdf by
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdficebreaker4
287 views13 slides
Windows 11 information that can be used at the development site by
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development siteAtomu Hidaka
80 views41 slides
JJUG CCC.pptx by
JJUG CCC.pptxJJUG CCC.pptx
JJUG CCC.pptxKanta Sasaki
6 views14 slides
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...NTT DATA Technology & Innovation
104 views42 slides
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
18 views38 slides
さくらのひやおろし2023 by
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023法林浩之
94 views58 slides

Recently uploaded(11)

SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4287 views
Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka80 views
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
さくらのひやおろし2023 by 法林浩之
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023
法林浩之94 views
The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.51 views
Web3 Career_クレデン資料 .pdf by nanamatsuo
Web3 Career_クレデン資料 .pdfWeb3 Career_クレデン資料 .pdf
Web3 Career_クレデン資料 .pdf
nanamatsuo16 views
SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda301 views

AndroidLint #DroidKaigi