Your SlideShare is downloading. ×
0
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Custom lintcheckをつくろう
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Custom lintcheckをつくろう

503

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
503
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
1
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. カスタムLint Check
  • 2. 自己紹介 • 山 誠(@zaki50) • (株)ウフィカでAndroidアプリを作ってます
  • 3. Android Lint こんなやつ
  • 4. カスタムLint Check • チェック項目を自分で作れる • 全プロジェクトに有効なものや • ライブラリプロジェクトに紐付いたもの
  • 5. たとえば Android の擬似乱数生成器の初期化バグ http://android-developers.blogspot.jp/2013/08/somesecurerandom-thoughts.html に対処するライブラリプロジェクトを作ったら 適切にライブラリプロジェクトを 使っているかチェックしてあげたい
  • 6. 一次情報 http://tools.android.com/tips/lint-custom-rules ただし、現状では書いてある通りにやっても ハマりどころ満載です
  • 7. というわけで ハマりどころを示しつつ具体的な手順を解説します せっかくなので IntelliJで。 注: IntelliJ Ultimate Editionは某イケメンさんの会社で買えます http://samuraism.com/products/jetbrains/intellij-idea この後出てくるコードはコチラ http://goo.gl/CfdHu9
  • 8. 実装: プロジェクト作成 まずは適当にプロジェクトとモジュールを作る
  • 9. 実装: 依存ライブラリ追加 $ANDROID_SDK_HOME/tools/lib/ • lint-api.jar • asm-4.0.jar • asm-analysis-4.0.jar • asm-tree-4.0.jar • common.jar • guava-13.0.1.jar • layoutlib-api.jar • lombok-ast.jar
  • 10. 実装:IssueRegistryクラス package org.zakky.lint; public class MyIssueRegistry extends IssueRegistry { public MyIssueRegistry() { } } @Override public List<Issue> getIssues() { return Arrays.asList( PrngFixDetector.ISSUE ); }
  • 11. 実装: MANIFEST.MF • Lint-Registry: でIssueRegistryクラスを 指定する
  • 12. 実装: Detectorクラス package org.zakky.lint; public class PrngFixDetector extends ResourceXmlDetector implements Detector.ClassScanner { ... public static final Issue ISSUE = Issue.create("PrngFix", //$NON-NLS-1$ "擬似乱数生成器の初期化バグへの対処を行っているかをチェックします", "擬似乱数生成器の初期化バグへの対処を行っているかをチェックします", "擬似乱数生成器の初期化バグへの対処を行っているかをチェックします", Category.USABILITY, 4, Severity.WARNING, new Implementation(PrngFixDetector.class, EnumSet.<Scope> of(Scope.MANIFEST, Scope.CLASS_FILE))); } • Detectorクラスの中で ISSUE定数を定義する • ISSUEでID、説明、チェック実装クラス、Scope等を定義する • Scopeに合わせて適切なScannerインタフェースを実装する
  • 13. 実装: Scope • MANIFEST • JAVA_FILE 排他 JavaScanner • ALL_JAVA_FILES • RESOURCE_FILE 排他 • ALL_RESOURCE_FILE • CLASS_FILE 排他 • ALL_CLASS_FILES XmlScanner ClassScanner • PROGUARD_FILE • OTHER OtherFileScanner
  • 14. 実装: Detectorクラス ここには貼りきれないので IntelliJ の画面へ
  • 15. 実装: Jarを作る • 依存ライブラリは含めない • MANIFEST.MFを指定 • Build on make お勧め
  • 16. 配置 全プロジェクトに適用 ~/.android/lint/の下に適当な名前.jar として置く ライブラリプロジェクトにひもづける場合 $Project/build/lint/の下にlint.jar という名前で置く
  • 17. 動作確認 公式ドキュメントには 実際にはカスタムCheckは出てきません!←バグ eclipse or gradleで確認しましょう https://code.google.com/p/android/issues/detail?id=61242
  • 18. 実装例 AOSPの既存のコードを見るのが一番 $ repo init -u https://android.googlesource.com/platform/manifest -g tools $ repo sync tools/base/lint/libs/lint-hecks に既存のDetectorがある tools/base/lint/libs/lint-api の下にはAPIのソースがある repo コマンドについては http://source.android.com/source/ downloading.html を見てね
  • 19. 実際に動かしてみます

×