GVKun编程网logo

java – 应用程序在Eclipse的调试/运行中工作,但.APK在解析包含自定义视图的XML布局时给出.classNotFoundException

32

本文将介绍java–应用程序在Eclipse的调试/运行中工作,但.APK在解析包含自定义视图的XML布局时给出.classNotFoundException的详细情况,。我们将通过案例分析、数据研究

本文将介绍java – 应用程序在Eclipse的调试/运行中工作,但.APK在解析包含自定义视图的XML布局时给出.classNotFoundException的详细情况,。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于android – 在Eclipse中转换为Maven项会导致ClassNotFoundException、Android应用程序上的Java运行时异常:java.lang.ClassNotFoundException、eclipse / tomcat:部署不再起作用(ClassNotFoundException)、eclipse 启动tomcat, java.lang.ClassNotFoundExcepti的知识。

本文目录一览:

java – 应用程序在Eclipse的调试/运行中工作,但.APK在解析包含自定义视图的XML布局时给出.classNotFoundException

java – 应用程序在Eclipse的调试/运行中工作,但.APK在解析包含自定义视图的XML布局时给出.classNotFoundException

当应用程序通过USB从Eclipse安装时,我的应用程序将在我的目标设备(HTC Desire HD)上进行调试和运行.

但是,当我导出到.APK然后在我的Desire HD上安装此.APK(首先手动卸载我之前安装的应用程序)时,它会崩溃.

检查过Logcat中的错误后,我可以看到,在布局XML文件中使用其完全限定名称引用的自定义扩展View of mine,显然无法找到并导致.classNotFoundException.

Logcat错误跟踪中的两条感兴趣的行是:

04-09 21:29:01.101:E / AndroidRuntime(2157):引起:android.view.InflateException:二进制XML文件行#12:错误输出类com.trevp.myAppName.DashboardLayout

以下是:

04-09 21:29:01.101:E / AndroidRuntime(2157):引起:java.lang.classNotFoundException:com.trevp.myAppName.DashboardLayout in loader dalvik.system.PathClassLoader [/data/app/com.trevp.myAppName -1.apk

只有从导出的.APK安装应用程序时,才会从Eclipse安装此应用程序时发生此崩溃.

如果这可能是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文件. (使用合并标记,因为其中的元素作为子元素添加到父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>

提前感谢您对此提出的任何建议.如果需要任何其他摘录或配置信息,请大声说出来.

解决方法:

现在通过使用从新创建的测试项目中获取的完全标准和默认的proguard.cfg文件来修复此问题.

我之前使用的配置文件,正如我原来的问题所引用的那样,我必须在短时间内手动添加到项目中,因为它丢失了.我不确定文件从何处传来 – 我最有可能使用Google搜索并找到了一个示例默认文件并且只是使用它.

这是Eclipse为我提供的新项目,它启用了一个有效的.APK.

-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 *;
}

我可以看到差异在-keepclass *类型指令中.

我现在将更加努力地了解如何配置Proguard!

为了感兴趣,请看以下几行:

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

这些看起来像是保存View构造函数(或保留包含它们的类),只有在从XML引用类时才会调用它们.

android – 在Eclipse中转换为Maven项会导致ClassNotFoundException

android – 在Eclipse中转换为Maven项会导致ClassNotFoundException

我在 Eclipse Juno中使用m2eclipse插件,使用JDK 1.7(根据Stack Overflow上的一些搜索从JRE 1.6切换).

新创建时,简单的Android应用程序运行正常.但是,当我将其转换为Maven项目时,每当我尝试运行应用程序时,我都会开始获取ClassNotFoundException.我已经尝试更新项目,重新启动Eclipse,检查构建路径中的所有库,清理和重建项目,重新启动模拟器,并将我的pom.xml减少到最低限度.

这个错误的原因是什么?对Maven来说是一些简单的错误配置吗?

我的LogCat:

07-09 23:07:18.027: D/AndroidRuntime(958): Shutting down VM
07-09 23:07:18.027: W/dalvikvm(958): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
07-09 23:07:18.137: E/AndroidRuntime(958): FATAL EXCEPTION: main
07-09 23:07:18.137: E/AndroidRuntime(958): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.myproject/com.example.myproject.MainActivity}: java.lang.classNotFoundException: com.example.myproject.MainActivity
07-09 23:07:18.137: E/AndroidRuntime(958):  at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1880)
07-09 23:07:18.137: E/AndroidRuntime(958):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
07-09 23:07:18.137: E/AndroidRuntime(958):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
07-09 23:07:18.137: E/AndroidRuntime(958):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
07-09 23:07:18.137: E/AndroidRuntime(958):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-09 23:07:18.137: E/AndroidRuntime(958):  at android.os.Looper.loop(Looper.java:137)
07-09 23:07:18.137: E/AndroidRuntime(958):  at android.app.ActivityThread.main(ActivityThread.java:4424)
07-09 23:07:18.137: E/AndroidRuntime(958):  at java.lang.reflect.Method.invokeNative(Native Method)
07-09 23:07:18.137: E/AndroidRuntime(958):  at java.lang.reflect.Method.invoke(Method.java:511)
07-09 23:07:18.137: E/AndroidRuntime(958):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-09 23:07:18.137: E/AndroidRuntime(958):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-09 23:07:18.137: E/AndroidRuntime(958):  at dalvik.system.NativeStart.main(Native Method)
07-09 23:07:18.137: E/AndroidRuntime(958): Caused by: java.lang.classNotFoundException: com.example.myactivity.MainActivity
07-09 23:07:18.137: E/AndroidRuntime(958):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
07-09 23:07:18.137: E/AndroidRuntime(958):  at java.lang.classLoader.loadClass(ClassLoader.java:501)
07-09 23:07:18.137: E/AndroidRuntime(958):  at java.lang.classLoader.loadClass(ClassLoader.java:461)
07-09 23:07:18.137: E/AndroidRuntime(958):  at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
07-09 23:07:18.137: E/AndroidRuntime(958):  at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1871)
07-09 23:07:18.137: E/AndroidRuntime(958):  ... 11 more

我的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>myproject</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <dependencies>
<dependency>
    <groupId>com.google.android</groupId>
    <artifactId>android</artifactId>
    <version>4.1.1.4</version>
    <scope>provided</scope>
</dependency>
  </dependencies>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.0</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

我的MainActivity.java:

package com.example.myproject;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }

}

更新:我发现在pom.xml上尝试做Maven Clean和Maven生成源成功.但是,Maven安装给我一个错误:

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] MainActivity.java:[12,33] package R does not exist
[ERROR] MainActivity.java:[18,44] package R does not exist

我还在最新的编辑中添加了一些内容(依赖和包装)以及修改过的(1.6-> 1.7,3.1-> 3.0)pom.xml文件.

解决方法

在我看来,为了避免这种情况,你不应该在Eclipse中创建一个新项目,然后将其转换为maven,但是从头开始用maven创建android项目.此外,总是在终端中构建您的项目(以防万一)因为m2eclipse不时会产生错误,特别是在复杂的项目中.

试试这个(在终端):

>制作一个文件夹,例如. myMvnProjects.
>转到此文件夹.
>类型:mvn archetype:generate
>选择de.akquinet.android.archetypes:android-quickstart(为Android应用程序创建骨架)(或其他 – 它取决于您的需求).
>提供必要参数(platform,groupId,artifactId,version等)
>点击回车(或在Mac上返回)就是这样–Maven为您生成一个简单的项目.
>键入:mvn clean install并等待它构建.

顺便说一句,我很好奇为什么你有< packaging> jar< / packaging>在你的主要android项目中.你应该有< packaging> apk< / packaging>.更重要的是,Maven对JDK 7没有任何问题.

Android应用程序上的Java运行时异常:java.lang.ClassNotFoundException

Android应用程序上的Java运行时异常:java.lang.ClassNotFoundException

如何解决Android应用程序上的Java运行时异常:java.lang.ClassNotFoundException?

背景:我有一个Xamarin Forms应用程序以及相应的iOS和Android应用程序。该应用程序实质上是一个简单的浏览器包装程序,可在其中显示网页。

自从最近一次更新以来,我们主要在Android 6.0、7.0和7.1版本上遇到了大量崩溃。下面是错误的堆栈跟踪。我尝试使用Android模拟器重现该错误,但到目前为止仍未成功。对此造成潜在影响的任何线索都受到高度赞赏

enter image description here

PS::升级中的主要更改包括将目标android版本更改为Android 10(API级别29)。使用Android 9.0版进行编译

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

eclipse / tomcat:部署不再起作用(ClassNotFoundException)

eclipse / tomcat:部署不再起作用(ClassNotFoundException)

我正在Linux Ubuntu Natty Narwhal中运行带有Tomcat 7.0.12的Eclipse Helios Service Release
1。

我一直很高兴地重新部署我的Web应用程序,直到它毫无理由地停止工作为止。显示以下异常:

SEVERE: Allocate exception for servlet Index
java.lang.ClassNotFoundException: obliquid.servlet.Index
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
  • 在“ 服务器” 选项卡中,“本地主机上的Tomcat v7.0服务器[已启动,已同步]
  • 我的项目显示为Tomcat v7.0 Server的子级
  • 在“属性”,“ Java构建路径”,“源”中,单击“ Project / src 源”文件夹
  • 在“属性”中,Web部署程序集具有以下映射: / WebContent- > // src- > / WEB-INF / classes/ test- > / build / classes
  • 我的 src 目录在 obliquid / servlet / Index.java中 包含一个Servlet。 __
  • 我已经尝试单击“ 清洁模块工作目录…”发布
  • 我试图从Eclipse Servers选项卡中停止和启动Server

我还应该检查什么?谢谢。

更新 尽管现在我正在处理新项目,但我还是回来检查旧项目,现在又神秘地开始工作了。我想我找不到发生的事情。

但是,今天有了新项目,我没有明显的原因遇到了404错误,我发现右键单击Tomcat服务器并选择“ Clean …”非常有用。也许可以帮上忙。

选择“清除…”表示:“清除将放弃所有发布状态并从头开始重新发布。确定要清除所有已发布资源吗?”。选择是,我解决了问题

更新2 在新项目上再次发生。404错误,这一次他们不会消失。

Stop -> Clean... -> Start (404)
Stop -> Clean Tomcat Work Directory... -> Start (404)
Stop -> Clean Tomcat Work Directory... -> Clean... -> Start (404)
Stop -> Remove on the application ->  Clean... -> Run As -> Run on Server -> (404)  
Exit Eclipse,Start Eclipse
Start the server -> (404)

UPDATE 3 事实证明,这次我只是没有注意到启动过程中由侦听器类引起的异常。解决问题后,它奏效了。猜猜我应该在凌晨3点停止工作。

eclipse 启动tomcat, java.lang.ClassNotFoundExcepti

eclipse 启动tomcat, java.lang.ClassNotFoundExcepti

其实,eclipse经常会犯这些小脾气,不知道如何解决的, 确实很恼人, 毕竟不是程序问题,有时候会花比较长的时间, 时间花在这上面确实很蛋疼

我总结,应该eclipse没有把部分class文件,部署到~/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps文件夹里(这是我的文件夹,当然不同机器是不一样的), 可以在

输入图片说明

输入图片说明

然后使用eclipse启动tomcat,自然会报classNotFound,

有如下解决办法:

**方法一.**eclipse菜单中的project,点击clean,注意,需要勾选build automatically

**方法二.**如果是maven项目,可以右击项目,maven,update project,选中force update of snapshots/releases

**方法三.**换一个tomcat试试

关于java – 应用程序在Eclipse的调试/运行中工作,但.APK在解析包含自定义视图的XML布局时给出.classNotFoundException的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android – 在Eclipse中转换为Maven项会导致ClassNotFoundException、Android应用程序上的Java运行时异常:java.lang.ClassNotFoundException、eclipse / tomcat:部署不再起作用(ClassNotFoundException)、eclipse 启动tomcat, java.lang.ClassNotFoundExcepti等相关知识的信息别忘了在本站进行查找喔。

本文标签: