Android: как разделить код между проектами, подписанными с тем же сертификатом

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

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

Solutions Collecting From Web of "Android: как разделить код между проектами, подписанными с тем же сертификатом"

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

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

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

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

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);