Android: как делиться кодом между проектами, подписанными одним и тем же сертификатом - PullRequest
15 голосов
/ 27 апреля 2010

В Android документации , касающейся подписи кода, мы можем прочитать: " Подписав несколько приложений с одним и тем же сертификатом и используя проверки разрешений на основе подписи, ваши приложения могут поделиться кодом и данные в безопасном режиме."

Как именно такой обмен кодами можно сделать? Можно ли выпустить основное приложение и несколько сменных плагинов, а затем обнаружить их во время выполнения? Как выглядит исходный код и каковы преимущества перед «стандартными» вызовами намерений из / в разные пакеты APK?

Ответы [ 2 ]

9 голосов
/ 28 апреля 2010

Используйте Context.createPackageContext () для создания экземпляра пакета для другого интересующего вас .apk. Если он подписан тем же сертификатом, что и ваш, и вы оба используете один и тот же общий идентификатор пользователя, то вы можете использовать флаг загрузить его код в ваш процесс, что позволит вам получить ClassLoader из контекста и создать экземпляр любого класса, который вы хотите.

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

Обратите внимание, что вы не можете изменить общий идентификатор пользователя для приложения (на что-то другое или переходить от наличия и отсутствия общего идентификатора пользователя), как только это приложение поступит в продажу.

3 голосов
/ 02 мая 2014

Скажем, вы хотите вызвать публичную функцию динамически загруженного класса. Используйте следующий фрагмент кода:

Context friendContext = this.createPackageContext("packageName", Context.CONTEXT_INCLUDE_CODE);
Class friendClass = friendContext.getClassLoader().loadClass("packageName.className");
Class noparams[] = {}; //say the function (functionName) required no inputs
friendClass.getMethod("functionName", noparams).invoke(friendClass.newInstance(), null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...