Должен ли я подписывать приложение для Android несколькими сертификатами или как?

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

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

Любые идеи?

Спасибо


person videoguy    schedule 05.05.2013    source источник
comment
Вы избавляетесь от своего собственного релиз-ключа и подписываете все ключом платформы, предположительно.   -  person CommonsWare    schedule 05.05.2013


Ответы (1)


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

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

person QJGui    schedule 12.04.2014