Java Android-缺少应用程序子类

Java Android-缺少应用程序子类,java,android,adt,google-play,classnotfoundexception,Java,Android,Adt,Google Play,Classnotfoundexception,我对Eclipse、ADT和GooglePlay的一个问题有点困惑,而且有点恼火 我正在运行OSX10.8.2、Eclipse4.2.1和ADT20.0.3 以下是导致问题的工作流: 开发者Alpha负责构建用于内部/外部发布的Android应用程序 其他开发人员在应用程序上工作,将更改推送到GitHub 开发人员Alpha执行标准的拉/合并工具等 Alpha打开Eclipse,刷新主项目和两个库项目(ActionBarSherlock和FacebookSdk) Alpha运行一个项目>清理>

我对Eclipse、ADT和GooglePlay的一个问题有点困惑,而且有点恼火

我正在运行OSX10.8.2、Eclipse4.2.1和ADT20.0.3

以下是导致问题的工作流:

  • 开发者Alpha负责构建用于内部/外部发布的Android应用程序
  • 其他开发人员在应用程序上工作,将更改推送到GitHub
  • 开发人员Alpha执行标准的拉/合并工具等
  • Alpha打开Eclipse,刷新主项目和两个库项目(ActionBarSherlock和FacebookSdk)
  • Alpha运行一个项目>清理>全部
  • 此时运行将创建一个在模拟器和硬件(从OS 2.3.3到4.0.1)中都能正常工作的应用程序
  • Alpha运行Android工具>导出签名APK,输入密钥传递等
  • 生成的构建将通过电子邮件发送给用户,或上传到谷歌。请注意,它运行的代码与刚刚在模拟器/硬件后期合并中运行的代码完全相同
  • 有时会发生以下情况:
跟踪:

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
现在,我的问题是,为什么应用程序子类没有打包/可见

更糟糕的是,我们正在使用Acra,捕捉崩溃的注释位于丢失的应用程序上,因此没有崩溃报告

最后,我认为我们可以通过运行以下程序来测试构建的APK:

adb install ~/path/to/app.apk
但是,用户从Play store下载后将获得的二进制文件是否可以验证?谷歌会不会搞乱这个构建或者它的元数据

编辑:清单的相关位


编辑:自动生成的proguard.cfg

-优化过程5
-dontusemixedcaseclassnames
-DontskipnonPublicLibraryClass
-不要翻转
-冗长的
-优化!代码/简化/算术,!字段/*,!类/合并/*
-keep public class*扩展android.app.Activity
-keep public class*扩展android.app.Application
-keep public class*扩展了android.app.Service
-keep public class*扩展了android.content.BroadcastReceiver
-keep public class*扩展了android.content.ContentProvider
-keep public class*扩展了android.app.backup.BackupAgentHelper
-keep public class*扩展了android.preference.preference
-保持公共类com.android.vending.licensing.ILicensingService
-KeepClassSwithMemberNames类*{
本地人;
}
-keepclassswithmembers类*{
public(android.content.Context、android.util.AttributeSet);
}
-keepclassswithmembers类*{
public(android.content.Context,android.util.AttributeSet,int);
}
-keepclassmembers类*扩展了android.app.Activity{
public void*(android.view.view);
}
-keepclassmembers枚举*{
公共静态**[]值();
公共静态**valueOf(java.lang.String);
}
-keep class*实现android.os.Parcelable{
公开静态最终android.os.Parcelable$Creator*;
}
这是否可以验证为用户将获取的相同二进制文件 他们是从游戏商店下载的吗?谷歌会干扰这个构建吗 还是它的元数据

不,用户将获得与您将上载到您的计算机的文件完全相同的文件


关于指定的异常-它告诉您,
AndroidManifest.xml
android:name
属性中指定的
Application
子类在final.apk文件中丢失。每次尝试运行应用程序的特定版本时,而不是“有时”,都应抛出此异常

我们的项目也遇到了类似的问题。Eclipse中的版本构建从左到右丢弃类

出于某种原因,当第一次完成调试构建时(一直到在模拟器上运行它),然后完成发布导出时,它开始工作


这听起来像是Eclipse中的一个bug,因为proguard甚至没有配置为在我们的
项目.properties
文件中使用。

您可以附加您的AndroidManifest.xml文件吗?@Hit:Done,尽管值得注意的是,这不是一个新的应用程序,它只是一个新版本(6个游戏中断,我刚刚提交7个)。这和
versionName
是清单中唯一更改的内容。您是否使用Proguard或其他模糊处理程序?@Hit:不是故意的,但在项目的根目录中有一个自动生成的模糊处理程序,我已经更新了我的问题。IMHO this:
.application.APPLICATIONApplication
似乎很错误^^^我不太明白。我的理解是,我可以省略包的第一部分,只要它们是常见的。我的软件包进入
com.COMPANY.android.APPLICATION
,然后进入
.activity
.provider
等。因此,将应用程序定义为
.APPLICATION.APPLICATIONApplication
应该不是问题。此外,这个设置已经运行了将近一年,跨越了应用程序的6个版本。而且,当从Eclipse运行时,代码将正常运行。它似乎被完全、随机地限制在构建一个有符号的APK上。此外,正如我发布的摘录所示,我正在我的
清单中定义我的
,因此根据文档连接时,所有路径都是正确的。您是正确的,您可以使用“.subpackage.ClassName”作为应用程序类名。但我也有完全相同的问题,除了Eclipse也会发生。由于某些原因,Android builder根本不包括大块的应用程序类。你得到了有效的解决方案吗?对不起,我的问题是一个损坏的.classpath文件;输出被放在错误的目录中,这并不是ADT的错误:-),但还有一件事需要检查您是否有类似的问题。
<?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>
-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 *;
}