Как редактировать class файлы java
Редактирование файла класса из файла JAR также может быть вызвано исправлением исполняемого файла Java (файлов Jar) без знания исходного кода. Давайте посмотрим, как отредактировать файл класса из файла JAR, используя простой способ исправления исполняемого файла Java.
Методы (метод 1 игнорируется для объяснения в этой статье, поскольку он является обычным)
- Декомпилируйте файл JAR> Импортируйте декомпилированные классы в IDE (Eclipse, NetBeans и т. д.)> Измените исходный код> Перекомпилировать> Перестроить/перепаковать как JAR
- Извлечь классы Java из JAR> Изменить байт-код Java> Проверить> Повторно упаковать файл JAR
- Извлечь Java классы из исполняемого файла> Изменить байт-код Java> Обновить исполняемый файл с помощью измененных классов/файлов с помощью командной строки
Первый метод, упомянутый выше, является хорошим вариантом, если у вас есть исходный код кода и знаком с компиляцией Java, концепциями объектно-ориентированного программирования, но имеет несколько упомянутых ниже сложностей
- Целевой файл JAR имеет зависимости от других библиотек. Вы должны быть знакомы с этими зависимостями в своем проекте.
- Процесс декомпиляции не является точной наукой, поэтому ожидайте исправления ошибок, прежде чем заставлять его перекомпилировать
Таким образом, метод (1) не является обязательным для использования, давайте также рассмотрим метод (2). Метод (2) быстрее, менее подвержен ошибкам и довольно прост в исполнении.
Метод 2 (извлечение классов Java из исполняемого файла> Изменение байт-кода Java> Обновление исполняемого файла с помощью измененных классов/файлов с помощью команды подсказка)
Шаги высокого уровня:
- Настройка среды
- Используйте JD-GUI, чтобы заглянуть в Файл JAR
- Распакуйте файл JAR
- Измените файл .class с помощью редактора байт-кода Java.
- Повторно упакуйте измененные классы в новый архив файл
- Проверьте его с помощью JD-GUI
1. Настройте среду
Убедитесь, что у вас установлен JDK и путь к классам настроен правильно, для проверки -> Открыть командную строку
На моем компьютере результат выглядит примерно так:
2. Используйте JD-GUI для просмотра файла JAR
Я предпочитаю JD-GUI для просмотра файла JAR, вы можете установить JD-GUI по ссылке ниже,
Просматривая файл JAR в нашем примере, мы могли видеть ниже класс в JD-GUI,
3. Распакуйте файл JAR
Создайте новую папку и скопируйте файл JAR в папку. Использование приведенной ниже команды распакует файл jar в папке.
4. Измените. class с помощью редактора байт-кода Java
Я предпочитаю редактор байт-кода Java редактировать файл .class. Редактор байт-кода Java можно загрузить по ссылке ниже,
5. Повторно упакуйте измененные классы в новый архивный файл
Перейдите в папку HelloWorld и введите следующую команду в командной строке CMD, чтобы перепаковать файл JAR.
6. Проверьте это с помощью JD-GUI
Теперь вы знаете, как просматривать JAR-файл с помощью JD-GUI. Откройте только что созданный файл HelloWorld-Custom.jar и проверьте файл класса на предмет модификации.
Теперь давайте посмотрим на метод (3), который я предпочитаю,
Метод 3 (Извлечь классы Java из исполняемого файла> Изменить байт-код Java> Обновить исполняемый файл с помощью измененных классов/файлов с помощью командной строки)
В этом методе только шаг 5 зависит от метода (2).
Шаги высокого уровня:
- Настройка среды
- Используйте JD-GUI, чтобы заглянуть в файл JAR
- Распакуйте файл JAR.
- Измените файл .class с помощью редактора байт-кода Java.
- Обновите измененные классы в существующем файле JAR
- Проверьте это с помощью JD-GUI
Выполните все, как в методе (2), за исключением шага 5. После завершения шага 4
5. Обновите измененные классы в существующем файле JAR
Используя следующую команду в командной строке, обновленный файл .class можно заменить существующим файлом JAR. Теперь перейдите в папку, в которой доступен JAR-файл в командной строке, и введите следующую команду.
Любые файлы, уже находящиеся в архиве, имеющие то же имя пути, что и добавляемый файл, будут перезаписаны.
Теперь файл Jar будет обновлен новым файлом класса. Для получения подробной информации об обновлении файла jar вы можете обратиться к ссылке ниже:
Заключение
Я хочу изменить метод файла .class. Я установил JD Eclipse Decompiler и открыл файл .class. Я добавил несколько кодов и сохранил файл .class. Но, файл .class не меняется.
Я не знаю, как использовать декомпилятор. И если это возможно, как изменить файл .class без использования декомпилятора.
Я использую Ubuntu.
Вот мой декомпилированный код:
Вы можете выполнить следующие шаги, чтобы изменить свой класс Java:
- Декомпилируйте файл .class, как вы это сделали, и сохраните его как .java
- Создайте проект в Eclipse с этим Java-файлом, оригинальным JAR как библиотека и все ее зависимости
- Измените .java и скомпилируйте
- Получите измененный файл .class и поместите его снова в исходный JAR.
Используйте редактор байт-кода, например:
Будьте осторожны, потому что вам нужно очень хорошее знание байт-кода Java.
Вы также можете изменить класс во время выполнения с помощью переплетения байт-кода (например, AspectJ).
Я добавил несколько кодов и сохранил файл .class.
В JD EClipse Decompiler вы видите декомпилированное представление байтового кода в файле .class. Даже если вы измените текст, это не повлияет на байт-код.
когда вы декомпилируете и изменяете код, вам нужно перейти в корневую папку вашего проекта eclipse и проверить свой класс в папке bin, который находится на том же уровне, что и src. затем откройте исходную банку с помощью инструмента zip ( 7zip подходит для этого) и поместите измененный класс в та же упаковка внутри банки.
Используйте библиотеку Java java assist для управления байт-кодом Java (файл .class) приложения.
— > Spring, Hibernate, EJB, использующий это для реализации прокси
— > мы можем манипулировать байт-кодом, чтобы выполнить некоторый программный анализ
— > мы можем использовать Javassist для реализации прозрачного кэша для возвращаемых значений метода, перехватывая все вызовы метода и делегируя только супер реализации при первом вызове.
Вы можете изменить код при декомпиляции, но его нужно перекомпилировать в файл class , декомпилятор выводит java , этот код должен быть перекомпилирован с тем же путем к классам, что и исходный jar / class файл
Насколько мне удалось выяснить, простого способа сделать это не существует. Самый простой способ — на самом деле не преобразовать файл класса в исполняемый файл, а обернуть исполняемый модуль запуска вокруг файла класса. То есть создайте исполняемый файл (возможно, исполняемый файл сценариев для ОС), который просто вызывает класс Java через командную строку.
Если вы хотите, чтобы на самом деле была программа, которая это делает, вам стоит взглянуть на некоторые из автоматических установщиков.
Вот способ, который я нашел:
Вы можете использовать любой декомпилятор, чтобы сначала декомпилировать файл.
Однажды я столкнулся с подобной проблемой, когда у меня не было исходного кода приложения, и мне пришлось внести очень небольшое изменение в файл.
Извлеченный файл класса из банки
Открыл его в декомпиляторе (я использую JD GUI, вы можете легко получить его из многих ресурсов в интернете) Вы можете скачать его с здесь
Вы можете просмотреть все файлы в банке с помощью графического интерфейса JD.
Иногда нам нужно собрать один файл из тысячи файлов, чтобы решить проблему. В таком случае можно создать такую же структуру папок, как путь к классу, декомпилировать файл в java или скопировать файл java из исходного кода. Внесите необходимые изменения, скомпилируйте один конкретный файл в класс со всеми зависимостями /классами и, наконец, замените файл класса. Наконец перезапустите контейнер. После того, как война взорвана, файл не будет заменен.
Продолжаем разговор о том, как Java Virtual Machine работает внутри. В предыдущей статье (оригинал на анг.) мы рассмотрели подсистему загрузки классов. В этой статье мы поговорим о структуре class-файлов.
Как мы уже знаем, весь исходный код, написанный на языке программирования Java, сначала компилируется в байт-код с помощью компилятора javac , входящего в состав Java Development Kit. Байт-код сохраняется в бинарный файл в специальный class-файл. Затем эти class-файлы динамически (при необходимости) загружаются в память загрузчиком классов (ClassLoader).
Рисунок — компиляция исходного кода Java
Каждый файл с расширением .java компилируется как минимум в один файл .class . Для каждого класса, интерфейса и модуля, определенных в исходном коде, создается по одному .class файлу. Это также относится к интерфейсам и вложенным классам.
Примечание — для простоты файлы с расширением .class будем называть “class-файлами”.
Давайте напишем простую программу.
Запуск javac для этого файла приведет к появлению следующих файлов.
Как видите, для каждого класса и интерфейса создается отдельный class-файл.
Что внутри class-файла?
Class-файл содержит следующую информацию.
Магическое число, сигнатура. Первые четыре байта каждого class-файла всегда 0xCAFEBABE . Эти четыре байта идентифицируют class-файл Java.
Версия файла. Следующие четыре байта содержат мажорную и минорную версию файла. Вместе эти номера определяют версию формата class-файла. Если class-файл имеет основной мажорную версию M и минорную m, то мы обозначаем эту версию как M.m.
У каждой JVM есть ограничения по поддерживаемым версиям class-файлов. Например, Java 11 поддерживает major версию с 45 до 55, Java 12 — с 45 по 56.
Пул констант. Таблица структур, представляющих строковые константы, имена классов, интерфейсов, полей, методов и другие константы, которые есть в структуре ClassFile и ее подструктурах. Каждый элемент пула констант начинается с однобайтового тега, определяющего тип константы. В зависимости от типа константы следующие байты могут быть непосредственным значением константы или ссылкой на другой элемент в пуле.
Флаги доступа. Список флагов, которые указывают класс это или интерфейс, public или private, финальный класс или нет. Различные флаги, такие как ACC_PUBLIC , ACC_FINAL , ACC_INTERFACE , ACC_ENUM и т. д. описаны спецификации Java Virtual Machine Specification.
This class. Ссылка на запись в пуле констант.
Super class. Ссылка на запись в пуле констант.
Интерфейсы. Количество интерфейсов, реализованных классом.
Количество полей. Количество полей в классе или интерфейсе.
Поля. После количества полей следует таблица структур переменной длины. По одной для каждого поля с описанием типа поля и названия (со ссылкой на пул констант).
Количество методов. Количество методов в классе или интерфейсе. Это число включает только методы, которые явно определены в классе, без методов, унаследованных от суперклассов.
Методы. Далее находятся сами методы. Для каждого метода содержится следующая информация: дескриптор метода (тип возвращаемого значения и список аргументов), количество слов, необходимых для локальных переменных метода, максимальное количество слов стека, необходимых для стека операндов метода, таблицу исключений, перехватываемых методом, байт-коды метода и таблица номеров строк.
Количество атрибутов. Количество атрибутов в этом классе, интерфейсе или модуле.
Атрибуты. После количества атрибутов следуют таблицы или структуры переменной длины, описывающие каждый атрибут. Например, всегда есть атрибут “SourceFile”. Он содержит имя исходного файла, из которого был скомпилирован class-файл.
Хотя class-файл напрямую не человекочитаемый, в JDK есть инструмент под названием javap, который выводит его содержимое в удобном формате.
Давайте напишем простую программу на Java, указанную ниже.
Давайте скомпилируем эту программу с помощью javac , которая создаст файл HelloWorld.class , и используем javap для просмотра файла HelloWorld.class . Запустив javap с параметром -v (verbose) для HelloWorld.class получим следующий результат:
Здесь вы можете увидеть, что класс публичный ( public ) и у него в пуле констант 37 записей. Есть один атрибут (SourceFile внизу), класс реализует два интерфейса (Serializable, Cloneable), у него нет полей и есть два метода.
Возможно, вы заметили, что в исходном коде есть только один статический метод main, но class-файл говорит, что есть два метода. Вспомните конструктор по умолчанию — это конструктор без аргументов, добавленный компилятором javac , байт-код которого также виден в выводе. Конструкторы рассматриваются как методы.
Сейчас уже никто не создает программы в консоли. Используя любимую IDE, разработчик чувствует себя неуютно за чужим компьютером, где её нет.
Решив разобраться в работе Ant и Maven, я поймал себя на том, что не смогу собрать приложение без них в консоли.
В данной статье я постарался уместить все этапы проектирования демонстрационного приложения, чтобы не искать справку по каждой команде на просторах Интернета.
От простого к .
Каждая программа обычно содержится в отдельном каталоге. Я придерживаюсь правила создавать в этом каталоге по крайней мере две папки: src и bin. В первой содержатся исходные коды, во второй — результат компиляции. В данных папках будет структура каталогов, зависящая от пакетов.
Один файл
Можно сделать и без лишних папок.
Берем сам файл HelloWorld.java.
Переходим в каталог, где лежит данный файл, и выполняем команды.
В данной папке появится файл HelloWorld.class. Значит программа скомпилирована. Чтобы запустить
Отделяем бинарные файлы от исходников
Теперь сделаем тоже самое, но с каталогами. Создадим каталог HelloWorld и в нем две папки src и bin.
Компилируем
Здесь мы указали, что бинарные файлы будут сохраняться в отдельную папку bin и не путаться с исходниками.
Используем пакеты
А то, вдруг, программа перестанет быть просто HelloWorld-ом. Пакетам лучше давать понятное и уникальное имя. Это позволит добавить данную программу в другой проект без конфликта имен. Прочитав некоторые статьи, можно подумать, что для имени пакета обязательно нужен домен. Это не так. Домены — это удобный способ добиться уникальности. Если своего домена нет, воспользуйтесь аккаунтом на сайте (например, ru.habrahabr.mylogin). Он будет уникальным. Учтите, что имена пакетов должны быть в нижнем регистре. И избегайте использования спецсимволов. Проблемы возникают из-за разных платформ и файловых систем.
Поместим наш класс в пакет с именем com.qwertovsky.helloworld. Для этого добавим в начало файла строчку
В каталоге src создадим дополнительные каталоги, чтобы путь к файлу выглядел так: src/com/qwertovsky/helloworld/HelloWorld.java.
Компилируем
В каталоге bin автоматически создастся структура каталогов как и в src.
Если в программе несколько файлов
HelloWorld.java
Adder.java
Ошибка возникла из-за того, что для компиляции нужны файлы с исходными кодами классов, которые используются (класс Calculator). Надо указать компилятору каталог с файлами с помощью ключа -sourcepath.
Компилируем
Если удивляет результат
Есть возможность запустить отладчик. Для этого существует jdb.
Сначала компилируем с ключом -g, чтобы у отладчика была информация.
Отладчик запускает свой внутренний терминал для ввода команд. Справку по последним можно вывести с помощью команды help.
Указываем точку прерывания на 9 строке в классе Calculator
Запускаем на выполнение.
Чтобы соориентироваться можно вывести кусок исходного кода, где в данный момент находится курссор.
Узнаем, что из себя представляет переменная а.
Выполним код в текущей строке и увидим, что sum стала равняться 2.
Поднимемся из класса Adder в вызвавший его класс Calculator.
Удаляем точку прерывания
Можно избежать захода в методы, используя команду next.
Проверяем значение выражения и завершаем выполнение.
Хорошо бы протестировать
Запускаем. В качестве разделителя нескольких путей в classpath в Windows используется ‘;’, в Linux — ‘:’. В консоли Cygwin не работают оба разделителя. Возможно, должен работать ‘;’, но он воспринимается как разделитель команд.
Создадим библиотеку
Класс Calculator оказался полезным и может быть использован во многих проектах. Перенесем всё, что касается класса Calculator в отдельный проект.
Измените также назавания пакетов в исходных текстах. В HelloWorld.java нужно будет добавить строку
Делаем архив jar
С помощью ключа -C мы запустили программу в каталоге bin.
Надо узнать, что у библиотеки внутри
Можно распаковать архив zip-распаковщиком и посмотреть, какие классы есть в библиотеке.
Информацию о любом классе можно получить с помощью дизассемблера javap.
Из результата видно, что класс содержит кроме пустого конструктора, ещё один метод sum, внутри которого в цикле вызывается метод add класса Adder. По завершении метода sum, вызывается Adder.getSum().
Без ключа -c программа выдаст только список переменных и методов (если использовать -private, то всех).
Лучше снабдить библиотеку документацией
Изменим для этого класс калькулятора.
Документацию можно создать следующей командой. При ошибке программа выдаст список возможных опций.
В результате получиться следующее
Можно подписать jar-архив
Если требуется подписать свою библиотеку цифровой подписью, на помощь придут keytool и jarsigner.
Генерируем подпись.
Генерируем Certificate Signing Request (CSR)
Содержимое полученного файла отправляем в центр сертификации. От центра сертификации получаем сертификат. Сохраняем его в файле (например, qwertokey.cer) и импортируем в хранилище
Файл qwertokey.cer отправляем всем, кто хочет проверить архив. Проверяется он так
Использование библиотеки
Есть программа HelloWorld, которая использует библиотечный класс Calculator. Чтобы скомпилировать и запустить программу, нужно присоединить библиотеку.
Компилируем
Собираем программу
Это можно сделать по-разному.
Первый способ
Здесь есть тонкости.
В строке
не должно быть пробелов в конце.
Вторая тонкость описана в [3]: в этой же строке должен стоять перенос на следующую строку. Это если манифест помещается в архив сторонним архиватором.
Программа jar не включит в манифест последнюю строку из манифеста, если в конце не стоит перенос строки.
Ещё момент: в манифесте не должно быть пустых строк между строками. Будет выдана ошибка «java.io.IOException: invalid manifest format».
При использовании команды echo надо следить только за пробелом в конце строки с main-class.
Второй способ
В данном способе избегаем ошибки с пробелом в main-class.
Третий способ
Включили код нужной библиотеки в исполняемый файл.
Запуск исполняемого jar-файла
Файл calculator.jar исполняемым не является. А вот helloworld.jar можно запустить.
Если архив был создан первыми двумя способами, то рядом с ним в одном каталоге должна находится папка lib с файлом calculator.jar. Такие ограничения из-за того, что в манифесте в class-path указан путь относительно исполняемого файла.
При использовании третьего способа нужные библиотеки включаются в исполняемый файл. Держать рядом нужные библиотеки не требуется. Запускается аналогично.
Как быть с приложениями JavaEE
Аналогично. Только библиотеки для компиляции нужно брать у сервера приложений, который используется. Если я использую JBoss, то для компиляции сервлета мне нужно будет выполнить примерно следующее
Структура архива JavaEE-приложения должна соответствовать определенному формату. Например
Способы запуска приложения на самом сервере с помощью командной строки для каждого сервера различны.
Надеюсь, данная статья станет для кого-нибудь шпаргалкой для работы с Java в командной строке. Данные навыки помогут понять содержание и смысл Ant-скриптов и ответить на собеседовании на более каверзные вопросы, чем «Какая IDE Вам больше нравится?».
Читайте также:
- Где хранятся метаданные файла
- Ryzen 3500x разгон памяти
- Unity сохранение настроек в файл
- Не могу переименовать файл pdf при включенном предпросмотре win7
- Как убрать файлы exe
Декомпиляция Java приложений
Недавно я задался вопросом: Какой декомпилятор лучше?
Начал мучить Google, экспериментировать. В итоге нашел отличное решение. Как декомпильнуть любую программу и получить рабочие «исходники»? Об этом в сабже.
Краткий обзор популярных декомпиляторов
Mocha
Mocha (автор — Hanpeter van Vliet)— это, вероятно, один из первых выпущенных декомпиляторов Java. Предоставляет консольный пользовательский интерфейс. Его релиз состоялся в 1996-ом году, ещё до того, как появился Java Development Kit версии 1.1
JAva Decompiler
JAva Decompiler, JAD (автор — Pavel Kouznetsov) — по всей видимости, самый
популярный декомпилятор Java. Как и Mocha, этот декомпилятор предоставляет консольный интерфейс, давно не обновляется и не поддерживается, но большое число графических инструментов для работы с ним, в том числе плагин JadClipse для среды разработки Eclipse, делают его и по сей день используемым в качестве подручного средства для декомпиляции небольших классов.
Помимо декомпиляции, JAva Decompiler обладает возможностью дизассемблирования .class-файлов.
DJ Java Decompiler
DJ Java Decompiler (автор — Atanas Neshkov) — долгое время вопреки названию являлся лишь графической оболочкой для предыдущего декомпилятора, позволявшей легко и удобно выбрать аргументы командной строки для вызова JAD. В текущей версии добавлена поддержка аннотаций, но декомпилятор стал условно-бесплатным (необходима покупка после 10 пробных использований).
JD-Core
- Полностью написана на языке C++, что делает декомпиляцию необычайно быстрой
- Не требует для работы Java Runtime Environment и поэтому не требует специальной установки
- Корректно декомпилирует .class-файлы, сгенерированные большинством компиляторов
Fernflower
- Параметрические типы
- Аннотации
- Перечислимые типы
- Утверждения
Мой выбор
- JD-GUI — для просмотра, не более
- Fernflower — полное восстановление
Fernflower будет развиваться в сторону деобфускатора
…
Специальных функций деобфускации Fernflower сейчас не содержит, они будут подключаться в дальнейшем отдельными модулями
Т.к. онлайн версия по неизвестным причинам не работает, а про оффлайн трудно что-либо сказать(кроме того, что качество декомпиляции отменное), не о каких модулях на данный момент речи быть не может.
Не хватает еще модуля переименования
Это да. Поищем что-то такое в интернетах.
На выручку придет Proguard, но необыкновенный
ProGuardDeobfuscator — небольшая модификация программы ProGuard, превращающая ее в квази-деобфускатор. В процессе обработки короткие обфусцированные имена пакетов, классов, полей и методов заменяются на более осмысленные и уникальные в пределах Jar файла.
Скачать исходники и сам деобфускатор: projectd8.org/Programs/Java/PGD
Инструменты все есть, но лично я, для облегчения воссоздания сорцов использую так же любимую Netbeans IDE — очень сильно помогает своими подсказками, особенно когда классов много.
Спасибо за внимание!
Ссылки
UPD:
Извиняюсь, в offline версии Fernflower присутствует модуль переименований и уйма других штук — Readme
Как редактировать class файлы?
Если я открою эти файлы через Word Pad то там будет окалесица из набора букв. А в JD-GUI код можно только смотреть, а не редактировать. Если код в Word Pad поменять то при сохранении, файл будет изменен изнутри. Мне надо отредактировать как то class файл.
Голосование за лучший ответ
Файлы class — это скомпилированные файлы Java, которые содержат байт-код для виртуальной машины Java. Чтобы редактировать их, вам нужно сначала декомпилировать их в исходный код Java, а затем скомпилировать их обратно в файлы class после внесения изменений.
hdfdfh dhfdfhgУченик (169) 3 месяца назад
Похожие вопросы
Как редактировать в jd gui
Class файл является байт-кодом скомпилированного Java-класса , который может быть запущен на JVM . Он не предназначен для чтения и редактирования вручную, поэтому открыть его как текстовый документ нельзя.
Если вам нужно проанализировать содержимое Class файла , вы можете воспользоваться инструментами, такими как Java Decompiler , JD-GUI или Fernflower . Эти инструменты позволяют декомпилировать байт-код Java-класса обратно в исходный код Java
Если вы используете среду разработки Java , вы можете просмотреть содержимое Class файла внутри среды. В IntelliJ IDEA для этого можно нажать на Class файл правой кнопкой мыши и выбрать «Show Bytecode»
JD — Java Decompiler
Java Decompiler (JD) — декомпилятор для языка программирования Java. JD предоставляется как программа c графическим интерфейсом, а также плагином для Eclipse IDE (JD-Eclipse) и IntelliJ IDEA (JD-IntelliJ). JD-Core, JD-GUI & JD-Eclipse это проект с открыты исходным кодом под лицензией GPLv3.
Как вы поняли, данная программа/плагин позволяет отображает исходные коды Java «. class » файлов. (Как вы поняли его можно использовать для просмотра кода из модов. )
Приложение состоит из двух частей. JD-Core представляет собой библиотеку для декомпилирования (отображения исходного кода) файлов «. class ». Может использоваться для воссоздания утерянного кода и так далее. JD-GUI – это графический интерфейс для удобного отображения Java кода.
Существует также плагин для популярной среды разработки Eclipse, который называется JD-Eclipse. Из особенностей приложения стоит отметить: высокую скорость декомпиляции, цветовую подсветку синтаксиса и поддержку иерархии файлов «. class ».
Сражу сказу что: JD-GUI & JD-Eclipse & JD-IntelliJ — для просмотра, но не более. Для полного восстановления кода/декомпиляций советую использовать Fernflower.
разобрать изменить и собрать
Месяцев 3 назад собрал приложение.никаких бд и ничего нет .чтото легкое .Проект сам утерян .теперь мне надо както сделать пару изменеий в проекте заменить текст и тд.Не знаю что делать ?можно ли как то декомпилоровать апк изменить данные и обратно компелировать ? Очень нужна ваша помощ
Отслеживать
задан 10 ноя 2016 в 6:28
5,648 5 5 золотых знаков 24 24 серебряных знака 54 54 бронзовых знака
приложение находится на Google Play?
10 ноя 2016 в 6:32
Нет я его не выставлял туда ю но должен сегодня
10 ноя 2016 в 6:33
у менять есть апк только
10 ноя 2016 в 6:33
или можно как то декомпилировать и взять оттуда мои данные и копи пастом создать новый проект
10 ноя 2016 в 6:33
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
для проведения таких действий вам потребуется:
Далее выполнить по следующим шагам:
- Качаем dex2jar и извлекаем в папку, например С:\Decompile .
- Качаем Java Decompiler (например JD-GUI) и извлекаем файлы для удобства в ту же папку, куда и dex2jar.
- Качаем apktool и apktool-install-windows-r04-brut1.tar.bz2 и извлекаем файлы уже в системную папку. По умолчанию C:\Windows . (Не забыть скачать второй архив)
- Берем нужный apk файл и кладем в папку с dex2jar и Java Decompiler.
- Открываем Командную строку (Обработчик команд Windows) в вышеупомянутой папке (В папке по пустому месте при зажатой кнопке Shift нажимаем правую кнопку мыши и выбираем Обработчик команд Windows).
- Вводим команду dex2jar и если все прошло хорошо, в той же папке появится файл .apk.dex2jar.jar
- Запускаем jd-gui и открываем полученный на предыдущем шаге файл. (На Windows 7 открывать с правами администратора и с совместимостью Windows XP SP3)
- Выбираем пункт меню File-Save All Source s и сохраняем.
- Извлекаем полученный zip архив.
- Помещаем полученную папку в папку src (надо предварительно создать).(Что бы получилась примерно такая структура С:\Decompile\\src\com\android )
- Опять же в командной строке вводим команду apktool d .apk , где .apk -имя пакета, -папка для декомпиляции.
Если все хорошо, тогда в указанной папке будут исходники в двух форматах (java и smali), ресурсы и файлы AndroidManifest.xml , apktool.yml
Таким образом будут получены исходники. Правда после декомпиляции в коде есть, можно сказать, ошибки,например вместо true и false стоят 1 и 0 соответственно.
Редактируем меню на Java
Русификация (или локализация программного обеспечения) на русский язык — приспособление программного и
аппаратного обеспечения к отображению и вводу знаков русской письменности, создание русскоязычного интерфейса.
Последний раз редактировалось Palych; 03.11.2019 в 16:42 .
25.06.2016, 22:06 #2
Руководство форума
Регистрация 26.03.2013
—> Сообщений 1,724
Всем привет! Есть вопрос, касаемо локализации, а точнее русификации меню, ну а ещё точнее то русификации меню на Джаве .
Там где надписи лежат целиком в PNG, там естественно проблем никаких, перерисовывай и подставляй, всё прекрасно работает,
это мы уже проходили. А вот где меню завязано со шрифтом, то там, кто как справлялся?]
Ну и сам PNG
Последний раз редактировалось Palych; 06.04.2019 в 19:47 .
26.06.2016, 10:11 #3
Руководство форума
Регистрация 20.05.2013
—> Сообщений 867
Палыч, лично я видел два диска. С подачи небезызвестного Lippe.
В первом случае имелся png c набором символов и там удалось методом чередования подобрать слова, чтобы буквы в наборе пересекались должным образом. Но слова получились странные, например Settings заменил Подстройки. И то сделал только главное меню — на большее меня не хватило — началасть чехарда с буквами в подменю.
Во втором случае текст был где-то в Java и то что удалось найти и заменить привело к неработоспособности диска.
Так что на мой взгляд только полностью пересобирать.
Может у кого были более позитивные результаты?
26.06.2016, 10:22 #4
Руководство форума
Регистрация 26.03.2013
—> Сообщений 1,724
А вот где меню завязано со шрифтом
Может кому не понятно про что речь, постараюсь объяснить, если получится. Если что-то напутаю, надеюсь меня поправят.
Все слова в меню набраны текстом с определённым шрифтом и хранятся где-то в классах, либо ещё где, про это и хотел
узнать, а сам шрифт лежит одной картинкой как на примере.
Вот меня и интересует, делал ли кто, что-либо подобное? И если делал то как?
имелся png c набором символов
Именно про это и хотелось узнать.
26.06.2016, 11:45 #5
Участник форума
Регистрация 28.04.2013
Адрес Питер
Сообщений 652
@Palych, привет. Точно в классах? иногда бывает, что в jar запихнут текстовый файл с расшифровкой. Искал перебором, в каком классе есть соответствующий текст. Возможно, это можно сделать быстрее просматривая в декомпиляторе, но, пока, этот вариант не пробовал.
добавлено: только русификация весьма проблематична. Кучка проблем, начиная с набора символов в мозаике шрифта, заканчивая тем, что кириллические буквы в хексэдиторе занимают две позиции, а не одну, как латинские. Надо смотреть конкретный диск.
— — — Добавлено — — —
@Palych, что-то, странный какой-то fonttable
26.06.2016, 15:04 #6
Руководство форума
Регистрация 20.05.2013
—> Сообщений 867
Именно про это и хотелось узнать.
@Palych, вот же ж об этом и написал.
Более подробно:
заменяем символы в фотошопе, если слово одно то проблем не будет а если хотя бы два то при замене слова Play на Просмотр и Chapters на Эпизоды возникает конфликт потому что символ «а» в первом слове нужно заменить на «о», а во втором на «и» Напрашиваются странные слова Играть и Отрывки зато в обоих случаях «а» меняется на «р» и так далее. Занятие не благодарное и я не уверен что существует вариант где все символы заменятся без потерь. Вот если к png прилагается txt с координатами то теоретически можно поиграть с переменой позиций символа.
@shtift, почему-то любое вторжение в jar-классы заканчивалось фолом — диск просто становился нерабочим.
P.S. По моему такие диски только пересобирать заново.
26.06.2016, 17:50 #7
Руководство форума
Регистрация 26.03.2013
—> Сообщений 1,724
Может у кого были более позитивные результаты?
Точно в классах? иногда бывает
Привет Друзья.
На данном этапе интересует в классах. То что не зашито в классах с этим я разобрался.
Ну и то что я сделал со шрифтом в PNG
@Palych, что-то, странный какой-то fonttable
Да самый нормальный, странным он теперь выглядит!