aswww log

エンジニアの技術録。アプリとかウェブとか

スマホアプリのスクショ作成ツールのメリットデメリット

スクショ作成がめんどくさすぎたので、どうにかして簡単にできないかとスクショ作成ツールについて調べた。
結論として今の自分の「個人開発で細々やっている」といった状況を考えると、作成ツールは使用せずに1から自作するのが一番との考えに至った。その調査結果を列挙する。
※全ての作成ツールを調べたわけでもないし、主観もかなり混じっているのであくまで参考までに。
※正直AppStoreまだよくわかってないので間違えていたらごめんなさい。

メリット

こだわらなければブラウザ操作だけで完成するので楽

 大抵WEBアプリなので画像素材さえ用意すればブラウザ内で作業が完結する。

タブレットなどの複数端末のスクショが一度に出力できる(有償の場合が多い)

 GooglePlayもAppStoreも複数端末(タブレット等)対応するにはいちいちその端末に応じたサイズのスクショを作成する必要があるので、一括で出力してくれるのはありがたい。

テンプレートを適用すればデザインの知識不要で作成できる

 サンプルはもちろん、配置などある程度決まっているのでデザインの知識が無くてもある程度のものは作成できる。

デメリット

有償版は大体が月3000円以上なので、使用頻度によっては高く感じる

 これは使用者の懐事情や公開アプリ数、スクショの更新頻度などに依存すると思うが、私は公開アプリ数も更新頻度も多くないしお金持ちでもないので費用対効果を考えると割高に感じる。

新端末の対応タイミングがツールに委ねられてしまう

 正直よく知らないけど、AppStoreの場合アプリをある最新端末向けに配信したい場合、その最新端末のフレームを使ったスクショをアップしなければいけないらしい。最悪スクショでベンダーロックインになりかねない。ちなみにGooglePlayはそこらへんゆるいので大丈夫。

こだわると自分で修正することになるので結局は労力が変わらない

 たくさんのデザインテンプレートが用意されているものの、どうしても「ここだけは色変えたい」や「角度をほんの10度傾けたい」などの欲こだわりが出てきてしまうことがある。もちろん多くの作成ツールはそこまで柔軟じゃないので、結局PhotoshopGIMPなどで修正することに。場合によっては最初から自分でやったほうがいいことも。

作成完了時に公開アプリのURLを聞かれる場合がある

 これはある特定の作成ツールの話で全ての作成ツールの話ではないし、使用者の感性によるけど自分はちょっと受け付けなかった。追跡されてる感がコワイ。。。

まとめ

以上の理由で個人開発者の自分の場合は作成ツールを使わずにスクショを準備する方針に決めた。ただ、メリットにもあるとおり作成ツールを使用したほうが断然作業が簡単だし時間削減になることはたしか。なので、例えば「複数部門が複数アプリを公開している企業」などは1ライセンスだけ契約してそのライセンスを社内でシェアして使用するとかならいいかも。(利用規約によります)

Andloid Studio 3.3.2 にてAVDが起動しなくない時の対処法

AndloidStudioはエミュレータを起動するとLogcatに必ず何かしらErrorが出ていたのだけど、無視していたがついにエミュレータが起動しなくなったので対処を調べた。
結論から言うと動くようになったものの、相変わらず件のエラーは出続けている。根本対応ではないけどとりあえずの応急処置ということで。

  • エラー内容

Logcat(英語)

Emulator: qemu-system-i386.exe: warning: opening audio input failed

Emulator: audio: Failed to create voice `adc'

Logcat(日本語)

23:33	エミュレーター: dsound: Attempt to initialize voice without DirectSoundCapture object

23:33	エミュレーター: dsound: Attempt to initialize voice without DirectSoundCapture object

23:33	エミュレーター: 聴覚: Failed to create voice `adc'
  • 対応

以下のリンク先の回答に書いてあるとおり、[ツール]→[AVDマネージャー]を開き、対象のエミュレータの鉛筆マークで編集画面へ。
[グラフィック]を[Softwere -GLES2.0]に変更して[完了]

stackoverflow.com

エミュレータを起動するとできるようになっているはず。しかも起動速度も早くなった。


audioだから音関係の不具合かと思ったらグラフィック?で全然結びつかないし、もしかしたら↑のログとは全然関係ないところのバグを解消しただけなのかもしれないけどエミュレータはよくわからないとこで挙動がおかしくなるのでとりあえずアプリが正常に動いているのを確認できればOKだと思います。

WebViewでロード後にアプリ内で指定したjavascriptを実行させたい

jQueryよろしく、ページオンロード後にjavascriptが実行できた実装

webView.loadUrl()した後にonPageFinished()内でwebView.evaluateJavascript()する。

public class MainActivity extends AppCompatActivity {

    protected WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setContentView(R.layout.activity_main);
        findViews(); // Viewの読み込み

        webView.loadUrl("[最初にロードするページURI]");

        webView.setWebViewClient(new WebViewClient() {
 
            @Override
            public void onPageFinished(WebView view, String url) {
                webView.evaluateJavascript("document.getElementById('aswww').style.backgroundColor = '#FFFFFF'",null);
        });
    }
期待どおりの動きにならなかった実装ログ

ダメだった実装のログ。WebView周りの動作とかメソッドの意味をあんまり把握していない人のただの試行錯誤なので参考までに。

  • webView.loadUrl()した後にonCreate()直下でwebView.evaluateJavascript()でjavascript実行した場合

→なんかうまく実行されなかった。

webView.evaluateJavascript("document.getElementById('aswww').style.backgroundColor = '#FFFFFF'",null);
  • webView.loadUrl()した後にonPageFinished()内でwebView.loadUrl()でjavascript実行した場合

→loadUrl()は追記じゃなくて全HTML上書きされてしまうし、挙動も変になったのでダメ。

webView.loadUrl("javascript:document.getElementById('aswww').style.backgroundColor = '#FFFFFF';");
  • webView.loadUrl()した後にonPageFinished()内でwebView.loadData()でHTMLタグ内でjavascript実行する形で記入して実行した場合

→loadUrl()と同じく追記じゃなくて全HTML上書きされてしまうのでダメ。

webView.loadData("<html><head>aaa...",  "text/html", "utf-8");

はてなブログでPNG画像のアップロードがうまくいかない

前回の記事投稿でだいぶ時間とられたので覚書。結論としてはJPG画像にしたらうまくいった。

はてなブログの画像アップロードの仕様
 現時点では以下のとおり

はてなブログから投稿できる画像ファイルの形式は、JPEG、GIF(アニメーションGIFを含む)、PNGのいずれかです。1枚で、長辺が10,000pxかつファイルサイズが10MBまでの画像に対応しています。

help.hatenablog.com

PNG画像→JPEG画像に変換
 対象の画像はWindows上では容量・サイズともに問題かった。なのでもう少し調べてみると以下の記事を発見。PNG画像は勝手に容量が大きくなるとのこと。ためしに画像形式をPNGJPEGに変更したらすんなり画像アップロードできた。アップロードしたPNG画像は40KBだったので相当大きくなったのかな

gamestart.hateblo.jp

Android Studio 3.1.3 における ADB初期化エラー

バイス・ファイル・エクスプローラーを開いたまま再起動したら以下のエラーが表示された

f:id:aswww:20180726120425j:plain

抜粋

Error initializing ADB: Unable to establish...(中略)
Try re-opening Studio after killing any existing adb deamons.

日本語訳

ADBの初期化に失敗しました。
IDEを再起動した後、adbデーモンのプロセスをキルしてください。

とりあえず再起動してもエラーが出てしまい変わらず。(しかもめちゃくちゃ重い)
調べてみたらStackOverFlowに似たような事例と解決法がのっていたのでやってみた。

android studio - Error initializing ADB: Unable to create Debug Bridge: Unable to start ADB server - Stack Overflow


手順は以下のとおり。(Windows 10の場合)

Android Studioを完全に終了する。(タスクマネージャーで確認)
コマンドプロンプトで↑のエラーに書いてあるadb.exeのパスを指定して以下のコマンドを実行。

C:\Users\ooooo\AppData\Local\Android\Sdk\platform-tools>adb.exe start-server

※結果は何も表示されない

・タスクマネージャーの詳細タブでadv.exeが存在するのを確認。そのままタスクマネージャー上で右クリックで終了する。
・改めてAndroid Studioを立ち上げる。今度はエラーが出ないはず。

Android Studio 3.1.3 IDE上からエミュレーターのPreferenceの内容を確認する

バイス・ファイル・エクスプローラーという機能を使えばGUIエミュレーター端末でアプリを実行したときのPreferenceの内容が確認できる。ちなみにAndroid Studioの3.1.3以前のバージョン(いつからかはわからない)だと確認方法が違う可能性があるので注意。

・デバイス・ファイル・エクスプローラーを開く
Googleの公式マニュアルのとおり。IDE右下にデバイス・ファイル・エクスプローラーって書いてあるタブがあるのでそれをクリックするのが手軽。
Device File Explorer で端末上のファイルを表示する  |  Android Developers

・以下をダブルクリックで開けばPreferenceの内容を確認できる
/data/data/[パッケージ名].debug/shared_prefs/[パッケージ名].debug_preferences.xml

ちなみにこのまま編集はできない。右クリックでファイル削除できるので、Preference初期化したいときは削除すればOK。編集したい場合は↑のXMLをいったんダウンロード→編集後のXMLをアップロードといった方法でするらしい。

半年ぶりにAndroidアプリをビルドしようとしたらbuild.gradleでエラー

2018年4月にAndroidアプリ周りで色々と仕様変更があり、ビルドがすんなり通らず苦戦したログ。

○gradle 3.0.0以上になって各書式が変わった
これはAndroidStudio3.0以上にアップデートした影響かもしれないけど、gradleを3.0.0以上にする必要が出てきてそれにともなって書式が変わった。具体的には以下の記事にあるとおり。自分の作ったアプリで関係あったのがapp配下のbuild.gradleにて"compile"と書いていたところを"implementation"に置換した。

Android Plugin for Gradle 3.0.0 への移行  |  Android Developers


○サポートライブラリが参照しているライブラリのバージョンの不整合によるエラー
以下のとおり、googlePlay公開における規約変更に伴い、targetSDKを現在の最新にする必要があった。
Google、Androidアプリに新バージョンAPIへの対応を義務づけ - CIOニュース:CIO Magazine

tartgetSDKを変更するとなるとサポートライブラリのヴァージョンも合わせて変更する必要がある。今回はtargetSDKを27に変更したのでサポートライブラリ郡もすべてそれに合わせて変更した。すると以下のライブラリだけエラー。

implementation 'com.android.support:appcompat-v7:27.1.1'

記載方法に間違いはないはずで、プロジェクトクリーンアップ、再起動、何をしても赤波線が消えなかったので根気よくググったら以下の記事を発見した。サポートライブラリの中で読んでいるサポートライブラリがバージョン違い(sdk26)になっていたらしく、サポートライブラリ内でエラーになっていたらしい。

kondotoru.hatenablog.com

上記事記載どおりにサポートライブラリ内で呼ばれているサポートライブラリを別行で指定してあげたらなんとかビルドがとおった・