2015年11月15日日曜日

apktool でビルド時に大量の public.xml error: Public symbol ...drawable/...is not defined

apktool でビルドコマンドを実行したところ以下のような public.xml の drawable/xxx が定義されていないというエラーが大量に出た。

...\res\values\public.xml:110: error: Public symbol drawable/foo declared here is not defined.

Windows のコマンドブロンプトを逆スクロールしても、このエラーで埋まっていて最初のほうの出力メッセージを見ることができない。
それで次のコマンドラインで標準エラー出力も含めて err.txt にリダイレクトした。

>apktool b target 1>err.txt 2>&1

するとエラーの始まりは拡張子が png だが実体は jpeg のファイルが原因で起きていた。

I: Building resources...
libpng error: Not a PNG file
ERROR: Failure processing PNG image ...\res\drawable-hdpi-v4\bar.png
...\res\values\public.xml:15: error: Public symbol drawable/hoge declared here is not defined.
(以下同様の public.xml の symbol not defined のエラーが大量に続く)

bar.png を調べると jpeg だったので png に変換して上書きした。
そして再びビルドすると public.xml symbol not defined のエラーは跡形もなく消えて、無事 apk が出来上がった。

実を言うと、最初はエラー出力の全容を確認することなく、 public.xml symbole ... not defined のエラーメッセージだけを調べて、解決策が見つからず諦めかけたのだ。

僕のようなおっちょこちょいも何人かはいるだろうと思って、ここに書いておくことにした。

2015年5月1日金曜日

Google Blogger で Google ドライブにあるオーディオファイルを再生する

  • 2024年1月20日:ここに記述した方法では再生出来なくなった
  • 2023年10月20日:Googleドライブの仕様が変わっていたので修正した
  • 2017年10月28日:共有のリンクのURLの仕様が変わっていたので修正した

Google Blogger は動画ファイルの埋め込みをサポートしているが、オーディオファイルの埋め込みはサポートしていない。音楽ファイルをどこか別のサイトに置き HTML5 の audio タグで再生することになる。ではどこのサイトに置くか、すぐに思いつくのは Google ドライブである。

まずはオーディオファイル (mp3) を Google ドライブにアップロードし「リンクを知っている全員が閲覧可」で共有する。そして「リンクを取得」すると次のような URL が得られる。
https://drive.google.com/open?id=0B2P36BuimE-gd3c0WjJOWTc5UWs&authuser=0
https://drive.google.com/file/d/0B2P36AuimE-gcGFaQXBkN3E0Tjg/view?usp=sharing
https://drive.google.com/file/d/0B2P36AuimE-gcGFaQXBkN3E0Tjg/view?usp=sharing&resourcekey=0-irEH_iL1lr9w0mXv3XB-WQ
この URL を audio タグの src に指定したいのだが、このままでは使えないのでidらしき部分と resourcekey 部分を使って以下のように変更する。ただし Googleドライブの仕様が変わると使えなくなることをお断りしておく。
https://docs.google.com/uc?id=0B2P36BuimE-gd3c0WjJOWTc5UWs&authuser=0
https://docs.google.com/uc?id=0B2P36AuimE-gcGFaQXBkN3E0Tjg
https://drive.google.com/uc?id=0B2P36AuimE-gcGFaQXBkN3E0Tjg&export=download&resourcekey=0-irEH_iL1lr9w0mXv3XB-WQ

埋め込むタグは以下のようになる。
<audio autobuffer="false" controls="true" preload="none">
<source src="https://drive.google.com/uc?id=0B2P36AuimE-gcGFaQXBkN3E0Tjg&export=download&resourcekey=0-irEH_iL1lr9w0mXv3XB-WQ"></source>
Your browser doesn't support HTML5 audio.
</audio>
Okay, folks...