Работа с HEX-редактором на примере хака CocoonJS

Сообщение Re: Работа с HEX-редактором на примере хака CocoonJS
» 19 апр 2013, 23:32

Кстати проблема решена, почистил ccleaner-ом временные файлы и установил другой апк менеджер.
Параллельно нашёл инфу как избавиться от ошибки "Не найден путь...."
Может кому будет полезно.






 





Reported by project member Brut.alll, Dec 5, 2011

If you use --rename-manifest-package option to aapt when building resources something weird happens. Resources are built for old package name, but manifest uses new one. This makes resources broken a little when using current apktool, because they're built for new package name, so resulting apk is a little different than original one.

In most cases it doesn't matter because resource package name isn't that important. However in some cases it is, e.g.:

- I think framework apks with changed resource package shouldn't work anymore
- if apk declares its own attrs and uses them in XMLs, they're referenced by package name, so references are broken after decoding - you won't be able to build apk back.

Problem can be reproduced very easily: just create new Android project, define some attr, use it in XML and then build resources with --rename-manifest-package. You will be able to apktool-decode resulting apk, but you will get "error: No resource identifier found for attribute" errors when building back.

Proper solution to this problem is to revert manifest package back to original one. So:

- check if resources package is different than the one in AndroidManifest.xml
- if so then rename android:package to that found in resources.arsc and store original android:package in apktool.yml
- when building use --rename-manifest-package if it is found in apktool.yml

Also in the case of apk-with-attrs files it should be possible to fix the problem quite easily without apktool support: just replace "http://schemas.android.com/apk/res/${originalPackage}" with "http://schemas.android.com/apk/res/${renamedPackage}" in all XML files. You can do this in unix by e.g.:

find res -type f | xargs perl -pi -e 's/http:\/\/schemas.android.com\/apk\/res\/com.touchtype/http:\/\/schemas.android.com\/apk\/res\/com.touchtype.swiftkey/g'




Вывод некоего Лерика:
"В итоге, как я понял, проблема в том, что в файлах с разметкой написан пакет "http://schemas.android.com/apk/res/com.touchtype", а в манифесте package="com.touchtype.swiftkey.phone.beta".
Для пробы изменил манифест на "com.touchtype" - все собралось.
Значит при получении такой ошибки есть два пути - найти во всех файлах разметки неправильное название и заменить на то, что в манифесте или же взять то, что написано в файлах с разметкой и заменить в манифесте. Думаю предпочтительней первый вариант.

З.Ы. Для тех, кто будет встречать эту ошибку в дальнейшем и найдет сей пост: для автоматической замены во всех файлах этой строки можно использовать Notepad++ (Ctrl+F -> Найти в файлах, дальше указываем папку и понеслась...)"
Большое спасибо всем, кто пишет мне респекты в ЛС! Очень рад, что до сих пор мои советы, примеры и уроки пользуются спросом... Но, к сожалению, я уже давно не занимаюсь разработкой игр и программированием вообще, поэтому я уже не лучший советчик в этом деле, да и времени совсем нет. Здесь на форуме я уже практически не бываю, но всегда открыт для общения в ВК: vk.com/virusfun
Но хоть меня здесь почти нет, мне все равно будут приятны ваши отзывы и плюсы [+]
Аватара пользователя

Игродел
Сообщений: 882
Я тут с 23 сен 2012, 14:51
Откуда: Хабаровск