【问题标题】:Renamed android app.. problems ensue重命名的android应用程序..问题接踵而至
【发布时间】:2011-03-03 17:15:33
【问题描述】:

我重命名了我的 android 应用程序(使用 eclipse refactor->rename)现在它在我进行活动初始化之前崩溃了。这是调用堆栈:

ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2417  
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2512   
ActivityThread.access$2200(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 119 
ActivityThread$H.handleMessage(Message) line: 1863  
ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
Looper.loop() line: 123 
ActivityThread.main(String[]) line: 4363    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] [local variables unavailable]    
Method.invoke(Object, Object...) line: 521  
ZygoteInit$MethodAndArgsCaller.run() line: 860  
ZygoteInit.main(String[]) line: 618 
NativeStart.main(String[]) line: not available [native method]  

我的应用中有一些本机方法,但它们与 Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) 中的签名不匹配,所以我不确定这是否相关。此外,如果本机方法存在问题,我会想象当我尝试调用它时它会崩溃(至少,这就是我开发它们时发生的事情)。我无法在任何地方找到断点,所以我不确定发生了什么或如何调试它。我想某处有一个文件对旧项目名称有一个神秘的引用,但我找不到它。

任何帮助将不胜感激。

【问题讨论】:

  • 愚蠢的问题,但是您是否检查以确保您的清单文件也已更新? AFAIK refactor->rename 不会自动更改清单。
  • 感谢 Abatishchev 的编辑 :)
  • @Brian:我的称为“AndroidManifest.xml”,没有提及项目名称。是否有一个元清单清单文件在某处引用该文件?

标签: java android eclipse android-ndk


【解决方案1】:

我自己刚刚完成了这个,我遇到了类似的(但不完全相同的问题)。

使用 Refactor > Rename 最大的问题是它只会管理代码中 Java 部分的命名。它不会更新任何 XML(在 Android 应用程序中有很多)。您必须在项目中搜索旧名称并手动将其切换为新名称。这包括 AndroidManifest.xml 等文件以及其他文件(很可能是任何 XML 文件)。此外,如果您更改了类的包结构,您也必须对其进行更新(尽管在这种情况下您似乎没有这样做)。

【讨论】:

  • 好的,我要 grep 项目(而不是使用似乎不想在文本文件中搜索的 Vista 搜索,即使它建议它)
  • @Tim - 啊,是的。绝对会推荐只使用 Eclipse 的文件搜索并使用 * 的搜索过滤器
【解决方案2】:

我会检查您的本地方法,因为本地方法的命名往往取决于 Java 类名。

此外,您必须更改 AndroidManifest.xml 中的名称以反映您的更改。

否则,您能否发布伴随堆栈跟踪的实际错误消息?

【讨论】:

  • 这是完整的堆栈跟踪。我注意到一些奇怪的事情 - 应用程序的旧名称仍然位于跟踪的顶部,即使我专门右键单击并使用新名称调试了应用程序。有些东西保留了对旧名称的引用,但我看不到是什么。
  • TimApp-Android2.1 [Android Application] DalvikVM[localhost:8602] Thread [<3> main] (Suspended (exception RuntimeException)) ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2417 ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2512 ActivityThread.access$2200(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 119 ActivityThread$H.handleMessage(Message) line: 1863 ActivityThread$H(Handler).dispatchMessage(Message) line: 99
  • 您是否更改了 AndroidManifest.xml 文件中的名称?
  • Looper.loop() line: 123 ActivityThread.main(String[]) line: 4363 Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] Method.invoke(Object, Object...) line: 521 ZygoteInit$MethodAndArgsCaller.run() line: 860 ZygoteInit.main(String[]) line: 618 NativeStart.main(String[]) line: not available [native method
  • 抱歉代码垃圾邮件,试图将整个堆栈放在那里并且没有掌握标签:( AndroidManifest.xml 中没有对旧项目或新项目名称的引用文件,仅限于保持不变的包('tim.app')
【解决方案3】:

不是重命名导致问题的项目,也不是 NDK 的罪魁祸首——这简直是天方夜谭,因为我在调用堆栈中看到了字符串“本机方法”。

问题是我已经重命名了活动以及,并且确实需要在清单中重命名,就像你们说的那样。

我认为这里有一个教训,那就是一次重构太多,而且太晚了! 总之,问题解决了!非常感谢你们的时间。

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 2012-10-16
    • 2011-06-14
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    相关资源
    最近更新 更多