« 勝手にパノラマ画像が!? | メイン | ラジコの録音環境を再構築 »

Android

ApiDemos のビルド

 参考にする為 グーグルのサンプル ApiDemos をビルドした時の記録。
 環境は、Windows7, Android Studio 2.3.3 SDK23, Nexus 5(Android 6.0.1)。

https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/
から最新のソースを取得して Android Studioでインポート。
SDK26 のインストールを求められるので追加。
さらに SDK24, 25 のインストールを求められるので追加。

 なぜか
ApiDemos\app\src\main\res\xml\preference_switch.xml
の拡張子.xmlが無くなっている為ビルドエラーとなるのでファイル名を修正。

 次は
「パッケージandroid.support.annotationは存在しません」
「パッケージandroid.support.v4.printは存在しません」
と警告されたので
Project Structure > app > Dependencies > +
からライブラリを検索して追加。
ApiDemos\app\build.gradle
の dependencies ブロックに
compile 'com.android.support:support-annotations:26.0.0-alpha1'
compile 'com.android.support:support-v4:26.0.0-alpha1'
が追記される。

 最後まで残ったエラー
「パッケージcom.google.android.mmsは存在しません」
については これとは別にソースをビルド必要な模様。
 今回 通信関係のサンプルは不要なので依存しているソース
ApiDemos\app\src\main\java\com\example\android\apis\os
MmsWapPushReceiver.java
MmsMessagingDemo.java
を削除してビルド成功。野良アプリでよければ→ ApiDemos.apk

追補。異なるPCで次のようなランタイムエラー
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.apis/com.example.android.apis.ApiDemos}: java.lang.RuntimeException: Package manager has died
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 Caused by: java.lang.RuntimeException: Package manager has died
    at android.app.ApplicationPackageManager.queryIntentActivitiesAsUser(ApplicationPackageManager.java:657)
    at android.app.ApplicationPackageManager.queryIntentActivities(ApplicationPackageManager.java:643)
    at com.example.android.apis.ApiDemos.getData(ApiDemos.java:65)
    at com.example.android.apis.ApiDemos.onCreate(ApiDemos.java:50)
    at android.app.Activity.performCreate(Activity.java:6251)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
 Caused by: android.os.DeadObjectException: Transaction failed on small parcel; remote process probably died
    at android.os.BinderProxy.transactNative(Native Method)
    at android.os.BinderProxy.transact(Binder.java:503)
    at android.content.pm.IPackageManager$Stub$Proxy.queryIntentActivities(IPackageManager.java:3018)
    at android.app.ApplicationPackageManager.queryIntentActivitiesAsUser(ApplicationPackageManager.java:651)
    at android.app.ApplicationPackageManager.queryIntentActivities(ApplicationPackageManager.java:643) 
    at com.example.android.apis.ApiDemos.getData(ApiDemos.java:65) 
    at com.example.android.apis.ApiDemos.onCreate(ApiDemos.java:50) 
    at android.app.Activity.performCreate(Activity.java:6251) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
 ApiDemos/app/src/main/java/com/example/android/apis/ApiDemos.java の queryIntentActivities() で 350個近い android.intent.category.SAMPLE_CODE アクティビティの取得でクラッシュ。
 ApiDemos/app/src/main/AndroidManifest.xml の android.intent.category.SAMPLE_CODE を含む activity を半分削除するととりあえず回避できる。
https://github.com/android-cn/android-discuss/issues/623 のように queryIntentActivities() を3分割して取得しても回避できる。

 Android Studio の
/c/Program Files/Android/Android Studio/bin/studio.exe.vmoptions
/c/Program Files/Android/Android Studio/bin/studio64.exe.vmoptions
で 最大メモリ -Xmx1280m → -Xmx2560m 効果無し。

 Manifestファイルのapplicationタグ内で、最大割当メモリ量を拡大する(3.0(ハニカム)以降)
android:largeHeap="true"
も効果無し。
 ちなみに HTC HTL23 (Android 5.0.2)では再現しない → 開発環境と端末の組み合わせ???

トラックバック

このエントリーのトラックバックURL:
http://www.remix.gr.jp/cgi/mt/mt-tb.cgi/7626

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)