Androidでスクショ撮ってgithubにissueを上げるライブラリ作った

Furufuruです。

ブログ駆動開発。

https://github.com/iaia/Furufuru

## 概要

アプリでここの画面ちょっとデザイン変だな、
みたいなとき、スクショして、
Github開いてNew issueでスクショ貼って何か書いて…
って結構面倒ですよね。
しかも個人所有の端末ではなく、
会社用の検証用端末だとgithubにまずログインしないと…
みたいなことも往々にしてあるかなと。

アプリを振ると、スクショ取ってgithubに投稿までしてくれるプラグインを作りました。

もともとの経緯は知らないんだが、
同じようなことができるサービスがあったらしい、今もあるらしいが、
そのサービスがかなりの値上げをしていて、
じゃあ自分で作るわっていうのが最初らしい。

## 使い方
詳しくはREADME参照

```
class MyApplication : Application() {
  override fun onCreate() {
    super.onCreate()
    Furufuru.builder(
      application = this,
      githubApiToken = BuildConfig.GITHUB_API_TOKEN,
      githubReposOwner = “iaia",
      githubRepository = “Furufuru"
    ).build()
  }
}
```

アプリ起動させて、振るとスクショ取って画面が出てきます。

furufuru

furufuru

## 仕様

アプリが起動している間生き続けていて、
onActivityStartedするとsensor用のサービスが起動、
onActivityPausedするとサービス止めます。

### sensor service

「振る」を検知するためのサービスです。
ここコピペなのであんまり理解してないんだよな。

検知したら次の準備用の画面を起動させます。

### 準備用画面

ここ無くしてます。activityのlifecycle callbackがあることに気づいたので、activityからスクショ取れるようになった。
~透明な画面を作ってます。スクショとってる。~
~MediaProjectionを使ってるのでダイアログが出ます。~
~取れたらissue起票画面起動。~

### issue起票画面

スクショ貼る

タイトル必須です。
bodyも何か詳細書いてくれると嬉しいので置いてます。
~送信ボタンが下にあって隠れてるので右上に置きたい。~ 置いた
投稿したら終了して、またsensor用のサービス起動させる。

## 苦労

まずサービスがめんどくさい。
アプリが起動中、ずっと起動し続けたいのでその調整で四苦八苦。
起票したあと、スクショキャンセルしたとき、とかパターンごとにちゃんと再起動してるかどうかとか。
なんかクラッシュしてるとか。

スクショもめんどくさい〜。
activity単位でスクショ取れるのがあったんだけど、
~activity渡すのどうするよって感じで結局mediaprojectionを使った。~ 使ってない
activity lifecycle callback便利だなー

最初マルチモジュールで作ってたんだけど、
マルチモジュールを1個のライブラリとして送信する方法が全然分からなくて、
結局一個のモジュールとして作ったほうが良いっていう結論になった。
難しいね。

jcenterに公開するの結構あっさりだった。
数日かかるのかなって思ったらその日のうちに認証されて公開されました!

投稿までテストしたいので、何回か送ったりするので
issueがいっぱい作られてて大変。

リファクタリングしたいけど、めんどくさい〜。
テストも書いていきたい。