2013-05-05 5 views
1

У меня есть служба Android, в которой используется частное приложение для связывания с Android (IWindowManager). Когда я создаю это как часть исходного кода платформы Android и устанавливаю его на устройство (где у меня есть доступ к Uboot и т. Д.), Он отлично работает.
Мне не нравится GIT, поэтому я перевел службу за пределы GIT в другую систему контроля версий, где у меня нет доступа к источникам Android, но я могу ее создать с помощью инструментов Android sdk build.
Поскольку IWindowManager скрыт api, система сборки sdk не смогла выполнить мои сборки. Я создал отдельный файл android.jar, содержащий android.jar из sdk plus framework.jar из сборки платформы. Для этого я использовал dj-dex2jar.
Я использовал пользовательскую задачу Ant (т. Е. Ant taskdef с поддержкой кода Java ant), чтобы изменить bootclasspath, используемый системой сборки sdk. Теперь моя служба построена с использованием инструментов для создания Android, но с использованием пользовательского файла android.jar, который я создал.
Когда я устанавливаю этот apk на нашем устройстве, я вижу, что он не работает, когда я вызываю injectKeyEvent() в службе IWindowManager. Эта служба отклоняет вызов, заявив, что у моего приложения нет разрешения INJECT_INPUT. Это ожидаемое поведение, поскольку мое приложение больше не является платформенным приложением.
У меня есть доступ к ключу платформы. Один из вариантов - подписать приложение с помощью ключевого слова платформы и обойти его. Но вот оговорка. Моему приложению также необходимо получить доступ к службам Binder из внутреннего приложения, ожидающего приложения, подписанного нашим ключом.Должен ли я подписывать приложение Android с несколькими сертификатами или что?

Как это назвать? Мне нравится, что моя служба может ссылаться на вызовы связующего, которые требуют, чтобы они были подписаны ключом платформы и могли вызвать вызовы связующего, которые требуют, чтобы они были подписаны нашим собственным ключом освобождения.

Любые идеи?

Благодаря

+0

Вы избавитесь от своего «собственного ключа освобождения» и, по-видимому, подпишите все под ключ платформы. – CommonsWare

ответ

0

В моем ROM, я использую только ключ платформы для проверки доступа. Поэтому я предлагаю вам позволить внутренней APP принять вызывающий процесс, используемый ключом платформы.

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