aswww log

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

海外旅行中に違反による広告停止処置を対応した件

先日まで海外旅行してきました。目的地は某EU主要国。色々なことがあったけど一番の山場は一泊目のホテルでやった違反による広告停止処置に対するアプリ修正作業でした。

日本出発直後に広告停止される

違反による広告停止通知が来たのは飛行機が離陸直後だったようです。目的地までネット繋がらないので気付いたのは17時間後、つまり既に半日以上が経過してました。
実はこれについては前から警戒してて、それこそ旅行中に何らかの違反やアプリ不具合が起こることを避けるために、2週間前からアプリの更新控えてました。それがまさか1ヶ月前の更新内容で停止されるとは、詰めが甘かった(^_^;)

違反内容の修正作業実施について検討

旅行中だったので少々のエラーなら放置しておくつもりだったのですが、広告停止処置は大事なので色々検討した結果、以下の理由から旅行先で修正作業をすることに決めました。

  • 広告停止をされた原因がなんとなく検討着いた。
  • 一説によると違反したまま何もしないで放置すると、「修正する意欲が無い」と見做されアカウント停止につながる可能性がある。
  • 違反通知が来た場合、模範的な修正反映期間は大体3日以内くらいであること。(諸説あり)旅程は一週間以上なので帰国後での修正まで間に合うかリスクがある。
  • 広告配信会社にメールで事情を話して命乞いをするこことも考えたが、かまってもらえるかわからないし、修正したほうが確実だと判断。
  • 手元に中身空っぽの8GBノートPCとAndroid実機があるので、ネットさえ繋がればリリースまで実施できると考えた。ネットはホテルWi-Fiか最悪空港のWi-Fiを使う。

一泊目のホテルで環境構築、リリース作業

旅程では現地に深夜到着だったので、空港近くのホテルで一泊目して寝るだけ予定でした。
部屋着いたらすぐにホテルのWi-Fiへ接続、繋がったらJDKすら入ってないメモリ8GBのノートPCにイチから開発環境を整えました。ホテルのWi-Fiがすごく遅かったのでダウンロードは最小構成で、なんとかAndroid Studioが動くまで開発環境を整えました。ソースコードも署名に関わる情報もプライベートクラウドに保存してたのでなんとか修正作業までこじつけることに成功。エミュレータはメモリ8GBだと死ぬと予想して端からプライベートのAndroid実機で検証も完了。無事修正版をGooglePlayにリリースできました。一人で開発してるとGit Pushとか忘れがちになっちゃってたけど、こういう時のために構成管理&クラウド可って必要なんだなと再認識しました。

その後、広告再開

飛行機で眠れなかったのに一泊目からロクに睡眠も取れず、案の定3日目くらいに体調崩したけど、なんとか旅程はクリアできたし、3日後に広告も再開しました。メデタシメデタシ。
国内旅行だと最悪すぐ帰れるけど海外旅行の場合はそうも行かないのでより一層準備がタイセツですね。次海外旅行行くなら今後は最低でも開発環境一式入れたUSBくらいは持っていこうと思いました。

以上、初めての海外旅行中でのアプリ修正対応録でした。

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

スクショ作成がめんどくさすぎたので、どうにかして簡単にできないかとスクショ作成ツールについて調べた。
結論として今の自分の「個人開発で細々やっている」といった状況を考えると、作成ツールは使用せずに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をアップロードといった方法でするらしい。