Ошибка переименования имени пакета Android

Я щелкаю правой кнопкой мыши по своему проекту в eclipse, инструменты для Android, «Переименовать пакет приложения».

Выберите любое имя, и оно потерпит неудачу, направив вас к журналу ошибок для получения подробной информации.

Там я нахожу следующее:

eclipse.buildId=M20110210-1200
java.version=1.6.0_26
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=nl_BE
Framework arguments:  -product org.eclipse.epp.package.java.product
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.java.product

Ошибка Пт, 24 июня, 10:11:31 CEST 2011 Внутренняя ошибка

java.lang.reflect.InvocationTargetException
at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:91)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Caused by: org.eclipse.core.internal.resources.ResourceException: An error occurred while traversing resources.
at org.eclipse.core.internal.resources.Resource.accept(Resource.java:83)
at org.eclipse.core.internal.resources.Resource.accept(Resource.java:110)
at org.eclipse.core.internal.resources.Resource.accept(Resource.java:94)
at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.ApplicationPackageNameRefactoring.createChange(ApplicationPackageNameRefactoring.java:128)
at org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:124)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975)
at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
... 1 more
Caused by: java.lang.NullPointerException
at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.ApplicationPackageNameRefactoring.updateJavaFileImports(ApplicationPackageNameRefactoring.java:151)
at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.ApplicationPackageNameRefactoring$JavaFileVisitor.visit(ApplicationPackageNameRefactoring.java:427)
at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112)
at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127)
at org.eclipse.core.internal.resources.Resource.accept(Resource.java:74)
... 7 more
Root exception:
org.eclipse.core.internal.resources.ResourceException(/Touring Mobilis)[566]: java.lang.NullPointerException
at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.ApplicationPackageNameRefactoring.updateJavaFileImports(ApplicationPackageNameRefactoring.java:151)
at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.ApplicationPackageNameRefactoring$JavaFileVisitor.visit(ApplicationPackageNameRefactoring.java:427)
at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112)
at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127)
at org.eclipse.core.internal.resources.Resource.accept(Resource.java:74)
at org.eclipse.core.internal.resources.Resource.accept(Resource.java:110)
at org.eclipse.core.internal.resources.Resource.accept(Resource.java:94)
at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.ApplicationPackageNameRefactoring.createChange(ApplicationPackageNameRefactoring.java:128)
at org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:124)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975)
at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)

Этот инструмент работает для всех? Если да, сообщите мне, какую версию eclipse вы используете.

Я использую последние версии eclipse (64 бит) в Windows 7 с последним плагином ADT eclipse.


person Ophidian    schedule 24.06.2011    source источник
comment
Позвольте мне немного уточнить: в манифесте Android у нас есть это: ‹manifest xmlns:android=schemas.android .com/apk/res/android package=com.mycompany.android.application, поэтому класс R, содержащий все мои ссылки, будет com.mycompany.android.application.R Они повторяются во всем приложении в действиях. Я не могу просто создать базовую активность, потому что некоторые классы также наследуются от активности предпочтений и тому подобного. То, что я действительно ищу, - это «включаемый файл», который содержит одну строку с моим импортом .R. Теперь я должен изменить это много раз :(   -  person Ophidian    schedule 24.06.2011


Ответы (8)


Я столкнулся с той же проблемой. Я просто не смог переименовать пакет, используя package> щелкните правой кнопкой мыши> переименовать пакет. Оказалось, что ссылки на пакеты в некоторых шаблонах xml с использованием пользовательских элементов управления не обновлялись, поэтому файл R не мог быть создан. После просмотра xml и переименования ссылок был создан файл R, и я мог продолжить переименование.

person user756905    schedule 02.07.2011

Вы не можете поверить в это. У меня точно такая же проблема, потому что я полностью комментирую класс. Поэтому я думаю, что когда eclipse пытается изменить имя пакета комментируемого класса, он выдает эту ошибку.

Чтобы решить проблему, вам нужно только удалить класс или раскомментировать его.

person Litus    schedule 02.04.2013
comment
Также работает, чтобы просто добавить имя вашего пакета вверху закомментированного класса. Вопрос, который вы можете задать себе (я тоже да), заключается в том, почему закомментированный класс просто валяется;) - person riper; 10.10.2013

На самом деле я решил создать свой собственный инструмент для переименования пакетов.

На самом деле очень просто:

  • Замените AndroidManifest.xml на [packagename].
  • Замените [packagename].R во всех файлах *.java
  • Замените СХЕМЫ в XML-файлах: http://schemas.android.com/apk/res/[packagename]

Затем я выбираю «не обновлять конфигурации запуска» и обновляю проект eclipse.

Тогда все идет хорошо :).

Это в сочетании с ветками git и препроцессором антенны помогает мне получить гибкость, необходимую для выполнения многих версий приложения с различными параметрами.

person Ophidian    schedule 17.11.2011

Попробуйте щелкнуть правой кнопкой мыши на пакете и выбрать Refactor->Rename, у меня все работает нормально, никогда не было проблем. Надеюсь это поможет.

person Egor    schedule 24.06.2011
comment
Привет, спасибо за ответ. Щелчок правой кнопкой мыши по самому пакету вызывает переименование этого пакета. Однако это не те пакеты, которые я хочу переименовать. R-класс в Android создается с использованием имени пакета, привязанного к манифесту. Таким образом, все импорты com.mycompany.android.packagename.R не могут быть переименованы. - person Ophidian; 24.06.2011
comment
Просто переименуйте все свои пакеты, включая основной пакет, и очистите свой проект, не нужно ничего делать с классом R и его пакетом. - person Egor; 24.06.2011
comment
Извините, но вы действительно не понимаете, что я имею в виду, я думаю. Все пакеты, в которых находятся мои классы .java, не нужно переименовывать. На самом деле, они должны оставаться в одном пакете. Чего я действительно хочу, так это развернуть тот же код Android на рынке Android в качестве другого приложения. (с некоторыми разными модулями). Поэтому мне нужно изменить манифест Android с другим именем пакета. Это приводит к другому имени пакета для класса .R, и все операторы импорта для класса .R больше недействительны и должны быть изменены вручную в каждом действии/приложении/.., которое его использует. - person Ophidian; 24.06.2011
comment
Ну, по-моему, имя пакета приложения, указанное в манифесте, должно указывать на основной пакет приложения, это не просто указание для Маркета. Поэтому, если вы хотите изменить пакет в манифесте, вы должны изменить его в проекте. Я прав? - person Egor; 24.06.2011
comment
На самом деле они могут быть разными, и это неплохая практика. Рассмотрите кодовую базу, которая на 90% идентична, за исключением некоторых модулей и тем, настроенных для ваших клиентов. Если вы можете просто изменить имя пакета манифеста (а не фактические пакеты), вы можете создать жесткие ссылки на свои действия и приложения. Единственным недостатком является то, что, как я уже упоминал, класс .R следует за пакетом пакета манифеста. Рынок Android проверяет только уникальность имени пакета манифеста Android, а не пакетов классов (где находятся ваши java-файлы). - person Ophidian; 24.06.2011

У меня были похожие проблемы при рефакторинге/переименовании проектов с некоторыми версиями eclipse. Если вам нужно быстрое решение, я бы предложил это.

Создайте новое приложение для Android с именем, под которым вы хотите продавать его, и скопируйте исходный код файл за файлом в новое приложение. Предупреждение. Не копируйте сами файлы, а только код в файлах, так как eclipse имеет некоторые метаданные, связанные с каждым файлом, и это может привести к ошибкам компоновки.

Надеюсь это поможет.

person Dharini Chandrasekaran    schedule 24.06.2011
comment
Спасибо, я тоже думал об этом, но это так сложно поддерживать. Atm, я просто подумываю написать небольшой инструмент, который заменяет .R для меня. Но это еще одна вещь, о которой нужно помнить, когда я переключаю версии. - person Ophidian; 27.06.2011

У меня была такая же ошибка о «обходе ресурсов». Я удалил указанную папку (она не использовалась), и после этого я смог реорганизовать имя пакета.

person John Oleynik    schedule 03.11.2011

По-видимому, следующий способ может помочь вам переименовать.

1. Щелкните правой кнопкой мыши папку gen и переименуйте имя пакета в нужное вам. См. изображение ниже.

введите здесь описание изображения

2. После переименования вышеуказанного откройте файл манифеста и измените объявление пакета на то, что вы хотите, но оно должно быть таким же, как пакет в папке gen, см. ниже.

введите здесь описание изображения

Так должно быть, ребята. Удачного кодирования!

person Fred Ondieki    schedule 14.11.2013
comment
Эй, используя ваши шаги в моем проекте, нет никакой ошибки, но мое приложение открыто в то время. К сожалению, имя моего приложения остановлено. - person KAUSHAL J. SATHWARA; 08.06.2016

хаха Причина этой ошибки в следующем:

Caused by: java.lang.NullPointerException
at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.ApplicationPackageNameRefactoring.updateJavaFileImports(ApplicationPackageNameRefactoring.java:151).

Итак, вам нужно проверить, не имеет ли один из ваших java-файлов имя пакета.

Например:

//package com.telecom.request.login;
//
//import android.content.Context;
//import android.content.Intent;

Пакет моего java-файла был прокомментирован, затем eclipse не может получить имя пакета файла, появляется нулевой указатель.

Надеюсь, полезно для вас.

person Wade    schedule 31.07.2014
comment
на самом деле, у всех у них было имя пакета. Я предполагаю, что вышеуказанная ошибка исправлена ​​​​в наши дни обновлениями платформы. - person Ophidian; 02.08.2014