Вставка обоев в Android - PullRequest
       28

Вставка обоев в Android

0 голосов
/ 23 января 2012

Я пытаюсь добавить пользовательские обои в набор обоев по умолчанию в Android.Используя эмулятор (виртуальное устройство 2.3.3), я нашел их в /system/app/Launcher2.apk.Я вытащил APK и расшифровал его с помощью apktool, добавил обои в папку обоев, а затем снова перекодировал APK с помощью apktool.Но я не могу отправить новый apk в эмулятор.

На системном терминале, когда эмулятор включен, я использую "adb remount", чтобы сделать файловую систему доступной для записи, а затем использую "adb push", чтобы нажатьфайл, но я получаю сообщение об ошибке «не удалось скопировать: каталог не пустой».Если я пытаюсь использовать «adb install», я получаю следующее:

    1159 KB/s (5598893 bytes in 4.714s)
    pkg: /data/local/tmp/Launcher2.apk
    Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

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

Единственная причина, по которой я пытаюсь вставить обои в саму систему, заключается в том, что кажется, что стандартные обои и пользовательские обои обрабатываются по-разному.У меня есть эти очень простые обои ясного неба с облаком внизу;это в основном синий градиент с темно-синим цветом сверху и более светлым синим цветом снизу.Очень похожее изображение из набора обоев по умолчанию отображается очень хорошо, но когда я пытаюсь установить свое изображение в качестве обоев, я получаю заметную цветную полосу, а изображение по умолчанию - нет.

Я попытался вытащить обои по умолчанию изAPK, а затем отправляем его в эмулятор как обычную картинку в папке DCIM, и когда я установил его как пользовательские обои, я заметил, что он не отображается так, как будто я выбрал его из набора по умолчанию: у вас естьсначала обрезать его так же, как любое другое изображение, но при выборе всего изображения я понял, что обои по умолчанию на самом деле обрезаны, но не настолько, как при настройке обоев.То есть при выборе обоев по умолчанию отображается меньше, чем при вставке того же изображения на SD-карту и выборе вручную в качестве обоев.

Я просто пытаюсь понять, какAndroid работает с обоями, чтобы узнать, не делаю ли я что-то не так с изображением, или это настоящая проблема с Android, и нужно как-то «обмануть».Исходное изображение - JPG 800x480, пропорционально перераспределенное и обрезанное до 480x320 с помощью GIMP (оно предназначено для устройства с экраном 240x320).На моем компьютере изображение отображается нормально.

original image Исходное изображение

resized image Изменение размера изображения

Wallpaper from the default set Обои из набора по умолчанию, который я использовал для сравнения

Обратите внимание, что обои из набора по умолчанию имеют размер 640x480.Пересчет моего изображения до 640x480 тоже не сработал.

Я знаю, что это на самом деле два вопроса, а не один, но я не был уверен, как лучше объяснить мою проблему.Спасибо за понимание.

1 Ответ

3 голосов
/ 24 января 2012

В AOSP (Gingerbread и более ранних версиях) результирующая разница в качестве обоев, включенных в Launcher (как ресурсы в apk), и тех, которые пользователь может установить из файла на SD-карте (обычно через Camera / Gallery app) на самом деле из-за того, что данные с SD-карты несколько понижены, когда они прошли стандартную операцию CropImage, которая ограничивает изображение определенным выходным разрешением на основе значений, возвращаемых из вызовов API getWallpaperDesiredMinimumWidth() и getWallpaperDesiredMinimumHeight() ,

Те, которые включены в Launcher, устанавливаются напрямую с помощью вызова WallpaperManager.setResource(), передавая полноразмерный файл растрового изображения из ресурса, в то время как в случае CropImage они устанавливаются через WallpaperManager.setBitmap(), передавая пониженную выборку. растровый объект в памяти.

Похоже, что если вы используете (или пишете самостоятельно) приложение, которое использует WallpaperManager.setStream() API после выбора файла с SD-карты (вместо отсрочки CropImage), вы должны получить тот же результат качества обоев как те, в Launcher.

Обратите внимание, что в ICS действие CropImage было изменено, чтобы использовать BitmapRegionDecoder (среди прочего), чтобы предыдущее ограничение могло больше не применяться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...