我有点困惑,对Eclipse,ADT和Google Play一直存在的问题感到有些恼火。
我正在运行OS X 10.8.2,Eclipse 4.2.1和ADT 20.0.3。
以下是导致问题的工作流程:
跟踪:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate application com.COMPANY.android.APPLICATION.application.APPLICATIONApplication: java.lang.ClassNotFoundException: com.COMPANY.android.APPLICATION.application.APPLICATIONApplication
at android.app.LoadedApk.makeApplication(LoadedApk.java:482)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4089)
at android.app.ActivityThread.access$1300(ActivityThread.java:132)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4575)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.OO4usa.android.fanzlive.application.FanzliveApplication
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.app.Instrumentation.newApplication(Instrumentation.java:942)
at android.app.LoadedApk.makeApplication(LoadedApk.java:477)
... 11 more
现在,我的问题是,为什么Application子类没有打包/可见?
更糟糕的是,我们正在使用Acra,并且捕获崩溃的注释是缺少的应用程序,因此,没有崩溃报告。
最后,我想通过运行:
,我们总是可以尝试测试构建的APKadb install ~/path/to/app.apk
但是,这可验证地与用户从Play商店下载后获得的二进制文件相同吗?谷歌会不会搞乱构建或其元数据?
编辑: 清单的相关位
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.COMPANY.android.APPLICATION"
android:versionCode="7"
android:versionName="1.3.3" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="14" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<application
android:name=".application.APPLICATIONApplication"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.APP_green" >
<!-- activities -->
<!-- snip -->
<!-- services -->
<!-- snip -->
</application>
</manifest>
编辑: 自动生成的proguard.cfg
-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>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
答案 0 :(得分:1)
我们的项目遇到了类似的问题。 Eclipse中的发布版本是左右丢弃类。
出于某种原因,当首次完成调试构建(一直在模拟器上运行它),然后然后一个版本导出已完成它开始工作。
这听起来像Eclipse中的一个错误,因为甚至没有配置proguard用于我们的project.properties
文件。
答案 1 :(得分:0)
这可验证的是用户将获得的二进制文件 他们从Play商店下载它?谷歌会搞乱构建 或其元数据?
不,用户将完全 相同 .apk
文件,您将上传到Google Play Developer Console。
关于指定的异常 - 它会告诉您Application
中android:name
<application>
的{{1}}属性中指定的AndroidManifest.xml
子类在最终'.apk'文件中缺失{{1}}。在您尝试运行应用的特定版本时,应该抛出每次,而不是“有时”。