重构包名称会破坏应用程序与ClassNotFoundException,因为找不到Application类,即使它在那里

Ab_*_*Ab_ 3 refactoring android packages classnotfoundexception android-studio

这个包格式:

com
  example
    name
      oldAppName
Run Code Online (Sandbox Code Playgroud)

现在,我通过Shift + F6重构并重命名为:

com
  myCompanyName
    name
      newAppName
Run Code Online (Sandbox Code Playgroud)

但是,现在当我运行我的应用程序时,我遇到了这个崩溃:

java.lang.ClassNotFoundException: Didn't find class "com.example.name.oldAppName.Application" on path: DexPathList[[zip file "/data/app/com.myCompanyName.name.newAppName1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
Run Code Online (Sandbox Code Playgroud)

我有我的Application.javanewAppName,并且它在Manifest中正确定义 我尝试和做过的是:

  • 清洁和重建
  • applicationId在build.gradle中更改
  • 清单中的包名称是正确的,因此App和Activities的所有名称都是正确的.

实际上,这是我的应用程序清单标记:

<application
  android:name=".Application"
  ...
  >
Run Code Online (Sandbox Code Playgroud)

甚至更改.Application为完整的包名称(com.blah.blah.Application) 不工作.

我错过了什么吗?有缺失的一步吗?

这是完整的日志:

    java.lang.RuntimeException: Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication: java.lang.IllegalStateException: java.lang.ClassNotFoundException: com.example.name.oldAppName.Application
      at android.app.LoadedApk.makeApplication(LoadedApk.java:516)
      at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4345)
      at android.app.ActivityThread.access$1500(ActivityThread.java:135)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
      at android.os.Handler.dispatchMessage(Handler.java:102)
      at android.os.Looper.loop(Looper.java:136)
      at android.app.ActivityThread.main(ActivityThread.java:5045)
      at java.lang.reflect.Method.invokeNative(Native Method)
      at java.lang.reflect.Method.invoke(Method.java:515)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
      at dalvik.system.NativeStart.main(Native Method)
   Caused by: java.lang.IllegalStateException: java.lang.ClassNotFoundException: com.example.name.oldAppName.Application
      at com.android.tools.fd.runtime.BootstrapApplication.createRealApplication(BootstrapApplication.java:220)
      at com.android.tools.fd.runtime.BootstrapApplication.attachBaseContext(BootstrapApplication.java:239)
      at android.app.Application.attach(Application.java:181)
      at android.app.Instrumentation.newApplication(Instrumentation.java:1008)
      at android.app.Instrumentation.newApplication(Instrumentation.java:992)
      at android.app.LoadedApk.makeApplication(LoadedApk.java:511)
      at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4345) 
      at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5045) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
      at dalvik.system.NativeStart.main(Native Method) 
   Caused by: java.lang.ClassNotFoundException: com.example.name.oldAppName.Application
      at java.lang.Class.classForName(Native Method)
      at java.lang.Class.forName(Class.java:251)
      at java.lang.Class.forName(Class.java:216)
      at com.android.tools.fd.runtime.BootstrapApplication.createRealApplication(BootstrapApplication.java:209)
      at com.android.tools.fd.runtime.BootstrapApplication.attachBaseContext(BootstrapApplication.java:239) 
      at android.app.Application.attach(Application.java:181) 
      at android.app.Instrumentation.newApplication(Instrumentation.java:1008) 
      at android.app.Instrumentation.newApplication(Instrumentation.java:992) 
      at android.app.LoadedApk.makeApplication(LoadedApk.java:511) 
      at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4345) 
      at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5045) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
      at dalvik.system.NativeStart.main(Native Method) 
   Caused by: java.lang.NoClassDefFoundError: com.example.name.oldAppName/Application
      at java.lang.Class.classForName(Native Method) 
      at java.lang.Class.forName(Class.java:251) 
      at java.lang.Class.forName(Class.java:216) 
      at com.android.tools.fd.runtime.BootstrapApplication.createRealApplication(BootstrapApplication.java:209) 
      at com.android.tools.fd.runtime.BootstrapApplication.attachBaseContext(BootstrapApplication.java:239) 
      at android.app.Application.attach(Application.java:181) 
      at android.app.Instrumentation.newApplication(Instrumentation.java:1008) 
      at android.app.Instrumentation.newApplication(Instrumentation.java:992) 
      at android.app.LoadedApk.makeApplication(LoadedApk.java:511) 
      at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4345) 
      at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5045) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
      at dalvik.system.NativeStart.main(Native Method) 
   Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.name.oldAppName.Application" on path: DexPathList[[zip file "/data/app/com.newCompanyName.name.newAppName-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.myCompanyName.name.newAppName-1, /system/lib]]
      at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
      at java.lang.Class.classForName(Native Method) 
      at java.lang.Class.forName(Class.java:251) 
      at java.lang.Class.forName(Class.java:216) 
      at com.android.tools.fd.runtime.BootstrapApplication.createRealApplication(BootstrapApplication.java:209) 
      at com.android.tools.fd.runtime.BootstrapApplication.attachBaseContext(BootstrapApplication.java:239) 
      at android.app.Application.attach(Application.java:181) 
      at android.app.Instrumentation.newApplication(Instrumentation.java:1008) 
      at android.app.Instrumentation.newApplication(Instrumentation.java:992) 
      at android.app.LoadedApk.makeApplication(LoadedApk.java:511) 
      at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4345) 
      at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5045) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
      at dalvik.system.NativeStart.main(Native Method) 
Run Code Online (Sandbox Code Playgroud)

Vij*_*jai 5

有时,禁用即时运行将解决问题.

或者,如果禁用"即时运行"不起作用,则问题可能在于Android Studio尚未识别更改.首先备份您的项目,并注意您必须在此之后重新配置您的VCS(但不会丢失提交或分支,只需注册您的VCS.)

删除应用的.idea和[yourProjectName] .iml.


对于未来的用户:


在Android Studio中重命名包的正确方法

  1. 在"项目"窗格中,选择齿轮图标
  2. 如果选中,请取消选中" Compact Empty Middle Packages ".

齿轮图标示例

  1. 现在继续使用refactor->重命名每个分解的软件包名称(基本上是com,example,name,oldAppName)
  2. 重命名可能会打开一个警告对话框,您可能需要在其中选择" 重命名包"

警告对话框示例

  1. 完成重命名包后,将applicationIdGradle 替换为正确的包

  2. 同步gradle

  3. 清洁和重建

你可以找到一个更好的版本中如何正确地重构你的包在这里

PS:您必须在没有获得"ClassNotFound"异常的位置恢复原始包名称,并尝试上述解决方案.


归档时间:

查看次数:

1549 次

最近记录:

7 年,3 月 前