aswww log

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

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

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

Node.js+npmインストール(CentOS 7系)

Node.js+npmインストールCentOS 7系)

yumでインストールするのがスタンダードみたいなのでやってみる。

 yum install gcc gcc-c++
 yum install  nodejs --enablerepo=epel //nodejsのみインストール
 node -v //成功(バージョン表示)
v0.10.46
 yum install npm --enablerepo=epel

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
︙
5.10-25.el6.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: 1:v8-3.14.5.10-25.el6.x86_64 (epel)
             要求: libicuuc.so.42()(64bit)
エラー: パッケージ: 1:v8-3.14.5.10-25.el6.x86_64 (epel)
             要求: libicudata.so.42()(64bit)
エラー: パッケージ: gyp-0.1-0.6.1010svn.el6.noarch (epel)
             要求: python(abi) = 2.6
            インストール: python-2.7.5-39.el7_2.x86_64 (@updates)
                python(abi) = 2.7
                python(abi) = 2.7
            利用可能: python-2.7.5-48.el7.x86_64 (base)
                python(abi) = 2.7
                python(abi) = 2.7
            利用可能: python34-3.4.5-1.el6.i686 (epel)
                python(abi) = 3.4
エラー: パッケージ: 1:v8-3.14.5.10-25.el6.x86_64 (epel)
             要求: libicui18n.so.42()(64bit)
 問題を回避するために --skip-broken を用いることができます。
 これらを試行できます: rpm -Va --nofiles --nodigest

yumの依存関係が解決できなく、以下のとおりmakeでインストールした。
#OSアップグレードなど別途試行できそうなことはあった

git clone https://github.com/isaacs/npm.git
cd npm/
make
make install
npm

動いた

[root@dev tmp]# cat test.js
var http = require('http');
var server = http.createServer();

console.log('Hello Node.js');
[root@dev tmp]# node test.js
Hello Node.js

動いた

参考:
http://qiita.com/you21979@github/items/4efd9fc4363573191b5c
http://www.yoheim.net/blog.php?q=20130812

Node.js+npmインストール(Windows7)

Windowsインストーラーでのインストールなので簡単。
以下からインストーラーダウンロード&実行インストール
(Node.js公式)
https://nodejs.org/ja/download/

インストール完了したらコメンドプロンプトで以下のコードを実行

C:\Users\[ユーザー名]>cat test.js
var http = require('http');
var server = http.createServer();

console.log('Hello Node.js');

C:\Users\[ユーザー名]>node test.js
Hello Node.js

動いた。

参考:Node.js / npmをインストールする(for Windows
http://qiita.com/taipon_rock/items/9001ae194571feb63a5e