アプリケーションが Eclipse から USB 経由でインストールされている場合、アプリケーションはターゲット デバイス (HTC Desire HD) で完全に正常にデバッグおよび実行されます。
ただし、.APK にエクスポートしてから、この .APK を Desire HD にインストールすると (アプリケーションの以前のインストールを最初に手動でアンインストールした後)、クラッシュします。
Logcat でエラーを調べたところView
、レイアウト XML ファイルで完全修飾名を使用して参照されているカスタム拡張が明らかに見つからず、.classNotFoundException
.
Logcat エラー トレースの対象となる 2 行は次のとおりです。
04-09 21:29:01.101: E/AndroidRuntime(2157): Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class com.trevp.myAppName.DashboardLayout
さらに以下:
04-09 21:29:01.101: E/AndroidRuntime(2157): Caused by: java.lang.ClassNotFoundException: com.trevp.myAppName.DashboardLayout in loader dalvik.system.PathClassLoader[/data/app/com.trevp.myAppName-1.apk
このクラッシュは、アプリケーションが Eclipse からインストールされた場合には発生せず、エクスポートされた .APK からインストールされた場合にのみ発生します。
これが Proguard の問題である可能性がある場合は、ここに私の Proguard 構成ファイルを示します。Proguard を使用するのは初めてなので、デフォルトから実際には触れていません。Proguard のバージョンは 4.7 です。
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
膨張している XML ファイル。(Merge
タグが使用されるのは、その中の要素が子として親に追加されるためFrameLayout
です。)
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="top|left"
android:scaleType="centerCrop"
android:id="@+id/dashLayoutImage"
android:src="@drawable/background2" android:drawingCacheQuality="high"/>
<com.trevp.myAppName.DashboardLayout
android:clipChildren="false"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/dashLayout"
android:layout_gravity="top|left" />
<include
android:layout_gravity="top|left"
layout="@layout/status_bar"
android:id="@+id/statusBar" />
<TextView
android:layout_gravity="bottom|left"
android:id="@+id/pollRate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</TextView>
</merge>
これに関するヒントを事前にありがとう。他の抜粋や構成情報が必要な場合は、声をかけてください。