Android ICSの厳格なマニフェストチェックにご注意 - TechRepublic

Android ICSの厳格なマニフェストチェックにご注意 - TechRepublic

出版

クリス・ダケットの画像42

アプリケーションが Gingerbread および Ice Cream Sandwich 仮想マシンでは正常に動作するのにもかかわらず、ICS 物理デバイスでは実行できない理由を調べます。

先週、Ice Cream Sandwich を搭載したデバイスがオフィスに届きました。その機会を利用して、自作アプリを新しいデバイスでテストしてみました。理由はただ単にテストできるからというだけのことでした。ところが、アプリが起動しなくなり、デバッグに長時間を費やすことになりました。ICS エミュレータでは問題なくアプリが動作していたので、これは全く予想外の事態でした。

私が見たエラーは次の通りです:


[2012-01-20 16:45:03 - EverlastingBrowserTest] Starting activity com.techrepublic.everlastingbrowser.Splash on device C1OKAS034590

[2012-01-20 16:45:04 - EverlastingBrowserTest] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.techrepublic.everlastingbrowser/.Splash }

[2012-01-20 16:45:04 - EverlastingBrowserTest] ActivityManager: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000

いろいろ悩んだ末、マニフェスト ファイル内のアプリケーションに不要な権限エントリがあることが判明しました。


<?xml version="1.0" encoding="utf-8"?>

<manifest .... >

<uses-sdk android:minSdkVersion="10" />

<uses-permission android:name="android.permission.INTERNET" />

<application

android:icon="@drawable/ic_launcher"

android:label="@string/app_name" android:permission="android.permission.INTERNET">

...

</application>

</manifest>

修正は、問題のあるandroid:permission=”android.permission.INTERNET”プロパティを削除することでした。

アプリケーションを Gingerbread デバイスに展開したときにはこの問題に遭遇しなかったので、ICS は権限の重複に対して少し厳格になっていると考えられます。これはまったく悪いことではありません。

記事をシェア
クリス・ダケットの画像42

クリス・ダケット42

ソフトウェアエンジニアリングからジャーナリズムへの移行は遠いと言う人もいれば、フロアプランから判断するとわずか10メートルの違いだと正しく主張する人もいます。CBS Interactiveに入社して最初の5年間、クリスは2006年にプログラマーとして入社し、Builder AUの編集者としてジャーナリズムの道を歩み始めました。2010年にCBS Interactiveを退職し、カナダの雪の吹きだまりと美食を研究したいという強い思いを追い求めました。バンクーバーに拠点を移し、ライフスタイルゲームのスタートアップ企業でプログラマーとして働き、スノーボードとプーティンへの情熱を満たすための資金を得ました。2011年、クリスはプログラミングとジャーナリズムの才能を融合させる決意を固め、TechRepublic Australiaの編集者としてCBSに戻りました。

Tagged: