参考にする為 グーグルのサンプル 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 のインストールを求められるので追加。
なぜか
次は
Project Structure > app > Dependencies > +
からライブラリを検索して追加。
ApiDemos\app\build.gradle
の dependencies ブロックに
最後まで残ったエラー
今回 通信関係のサンプルは不要なので依存しているソース
ApiDemos\app\src\main\java\com\example\android\apis\os
環境は、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)では再現しない → 開発環境と端末の組み合わせ???