Недействительны mnc
или mcc
значения. Вы можете увидеть на странице Providing Alternative Resources что mcc
находится в диапазоне от 0 до 999, в то время как mnc
колеблется от 1 до 999.
Основываясь на именование рамках. Кажется, вы имеете дело с картой MIUI. Это означает, что вполне возможно, что MIUI изменил квалификаторы AOSP, чтобы позволить такие значения. Это означает, что MIUI будет иметь свой собственный модифицированный aapt
из тех изменений, которые могут обрабатывать эти нестандартные квалификаторы.
Я проверил ResourceTypes.h
, чтобы посмотреть, какие типы данных mcc
и mnc
есть.
union {
struct {
// Mobile country code (from SIM). 0 means "any".
uint16_t mcc;
// Mobile network code (from SIM). 0 means "any".
uint16_t mnc;
};
uint32_t imsi;
};
Как вы можете видеть, что они оба uint16_t
. Таким образом, наше максимальное значение равно 65535
. Таким образом, мы могли легко хранить 9998
и больше, не изменяя сами квалификаторы. Это указывает на проблему валидации aapt
.
Если мы посмотрим на AaptConfig.cpp
из aapt
мы видим parseMcc
и parseMnc
методы, которые оба имеют вариации этой проверки
if (c-val == 0 || c-val > 3) return false;
Так в основном любое значение больше чем 3 цифр не удалось, таким образом, давая вам эту ошибку.
Теперь я не знаю, как MIUI использует эти квалификаторы, но у вас есть два варианта.
Создайте свой собственный aapt
из источника, удаляющего эту проверку. Вам понадобится этот commit, который добавит поддержку других изменений классификатора MIUI. Чтобы быть в безопасности. Я бы просто создал ваш aapt
от моего platform_frameworks_base
repo. Из-за постоянного адаптационного характера aapt
, приложения становятся все труднее и сложнее перекомпилировать правильно. Моя вилка aapt
удаляет ненужные проверки. (Я делаю это, потому что, если вы декомпилируете apk, он уже был скомпилирован один раз, поэтому его не apktool для обеспечения 100% -ной совместимости, такой как новее aapt
, пытается обеспечить соблюдение).
Удалить те каталоги res/values-mcc9998-mnc9999
и values-mcc9466-mnc9999
.
Это грязный, но, возможно, вы можете скомпилировать его без этих папок, а затем переименуйте apk в расширение .zip, добавьте эти папки обратно, а затем переименуйте обратно в apk? (Вы не указали, подписан ли apk или нет.) –
Спасибо за ваш ответ, но apk нужно декомпилировать, чтобы увидеть такие папки (значения), и я не могу добавить их в zip-файл. Apk не нужно подписывать. – juliusssss
Вы знаете, что вы можете переименовать расширение apk прямо в файловом браузере в .zip и изучить содержимое, верно? Вы также можете добавить ресурсы и изменить их обратно в apk, без компиляции! –