自从我在Playstore上更新我的应用程序后,我遇到了问题。自此更新以来,抛出异常,但我没有更改与此异常相关的任何内容。
堆栈跟踪:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{de.opiatefuchs.onthejobtimerlight/de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity}: java.lang.ClassNotFoundException: Didn't find class "de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity" on path: DexPathList[[zip file "/data/app/de.opiatefuchs.onthejobtimerlight-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.ClassNotFoundException: Didn't find class "de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity" on path: DexPathList[[zip file "/data/app/de.opiatefuchs.onthejobtimerlight-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226)
... 10 more
Suppressed: java.lang.ClassNotFoundException: de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 13 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
问题是,我的App版本在运行之前没有问题,我没有改变任何与此活动相关的内容。我刚刚添加了一个与此活动无关的新信息对话框。这个应用程序是一个免费的Lite版本,我在专业版上做了完全相同的更改,没有任何东西被抛出。这按预期工作。 pro和lite之间的唯一区别是,我在精简版中集成了Admob(在新方式上),在专业版中集成了Google Play许可。但是我从一开始就已经整合了,并没有对此进行改动。 我也没有对清单进行任何更改,我在这里阅读了很多帖子,但没有任何帮助。
从5.0开始,它似乎只发生在Android版本上。有谁知道这个问题可能导致什么或有任何人相同的经历? proguard是否有可能通过混淆来破坏任何东西(在这里,没有变化)?
我没有发布任何代码,因为它对这个问题并不重要,就像我说我没有做过与此异常相关的更改。
此问题被标记为重复但不是。链接的注释不能解决我的问题,所有库都以正确的方式进行检查和集成。另外,我不使用NDK。
答案 0 :(得分:26)
经过很长一段时间,事实证明它必须与proguard有关。我无法确切地说出错误到底是什么,但我尝试了一点,这就是我注意到的(在我的情况下使用Eclipse IDE):
这是我所做的四点,然后才奏效。这看起来很可疑,但我认为混淆是个问题。因为没有做这些点,我可以简单地编译我的apk并从eclipse安装它。对我来说,这种行为没有明显的原因。 如果我只是从eclipse安装它,包名称也可以不做任何更改。 我希望这些观点可以帮到某些人。
答案 1 :(得分:15)
如果你显示包名是好的, 如果你关闭了项目, 并在文件资源管理器中重命名您的项目 但导入后再次遇到此问题 这里唯一的方法是
删除该文件夹 .gradle 。
可以使用文件资源管理器在项目文件夹中找到此文件。 它具有包含该旧项目名称的工件文件。 在Android Studio中重新打开项目后,将自动重新创建该文件夹。
答案 2 :(得分:8)
我刚把我的gradle从com.android.tools.build:grad:2.2.2更改为com.android.tools.build:gradle:2.2.0,问题还可以!
答案 3 :(得分:4)
对我来说,当包名称(目录名称)被更改时发生了。
我意识到"构建"文件夹神奇地维护项目构建的中间文件。 我删除了" build" " app"下的文件夹夹即可。现在,gradle必须使用新包名重新制作所有文件。现在它正常工作。
答案 4 :(得分:3)
tl; dr:这似乎是由AndroidManifest.xml
中相对和绝对声明的混合引起的。我认为最好的解决方案是在<application .../>
中声明<activity .../>
,<receiver .../>
,<service .../>
和AndroidManifest.xml
时使用相对表示法。
我有太长时间的问题了,因为我在{{<application .../>
,<activity .../>
,<receiver .../>
和<service .../>
声明中都使用了AndroidManifest.xml
,AndroidManifest.xml
,<manifest .../>
和package:
声明1}}。以下是我为解决这个问题所做的工作:
在你身上<manifest
package="com.my.absolute.package.path"
xmlns:android="http://schemas.android.com/apk/res/android">...</manifest>
确保<manifest .../>
部分正确指定了<application .../>
属性,它必须是确切的绝对路径,如下所示:
<activity .../>
现在您已在<receiver .../>
部分中指定了正确的绝对路径,您需要为所有<service .../>
,AndroidManifest.xml
,<application
android:name=".BaseApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".activity.SomeActivity"
android:configChanges="orientation"
android:label="@string/app_name"
android:parentActivityName=".activity.ParentActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".activity.ParentActivity"/>
</activity>
<activity
android:name=".activity.MyActivity"
android:configChanges="orientation"
android:label="@string/app_name"
android:parentActivityName=".activity.ParentActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme"
/>
<receiver
android:name=".receivers.MyReceiver"
android:enabled="true"
android:exported="false">
</receiver>
<service
android:name=".services.MyService"
android:enabled="true"
android:exported="false"
/>
</application>
使用相对路径, Run As Administrator
中定义了sfc /scannow
。
<强>示例:强>
regsvr32 vbscript.dll
当然,也一定要清理你的项目。
答案 5 :(得分:3)
如果您有多个模块,我认为它与multidex和多个包名称有关。清理项目并删除所有构建/文件夹。
答案 6 :(得分:1)
有时当我们生成签名的apk文件时,如果我们有一些依赖库问题(重复的jar库),那么就会发生这个错误。请检查构建路径并删除重复的库,并检查是否未从订单和导出选项卡中检查任何库。
答案 7 :(得分:1)
原因是,android无法在dexpath中找到特定的活动。
因此我们应该在“清单文件”中提供活动的完整路径。
例如,您的活动名称是“SplashActivity”,它位于“com.packagename.package”中。所以我们应该提供该活动的整个包名。
com.packagename.package.SplashActivity
答案 8 :(得分:0)
我有类似的问题,这是我的解决方案:
答案 9 :(得分:0)
我添加了
245448CA
225405LA
286623da
311969FA
332092HA
答案 10 :(得分:0)
我通过简单地重命名目录名并导入来更改目录名后出现类似错误。无法再安装了。既不重新启用USB调试也不重建项目。
我通过创建新项目并手动将所有相关内容复制到新项目来解决它。