Рассмотрим следующую ситуацию: у меня есть два проекта Android с именами P1 и P2, которые создают apk, использующие один и тот же идентификатор процесса, и будут работать в одном и том же процессе на Android. P1 и P2 используют библиотеку Java JL1. JL1 загружает во время выполнения разделяемую библиотеку 1 SL1.
Что я вижу во время выполнения, так это то, что в какой-то момент я получаю java/lang/UnsatisfiedLinkError при загрузке этого SL1. Он также выводит: Общая библиотека уже открыта.
Что вызывает эту проблему? Я предполагаю, что код библиотеки в java как бы копируется в каждый проект/apk, а во время выполнения, когда apks объединяются в один процесс, он забывает о копиях. Таким образом, каждая копия сама загружает свою разделяемую библиотеку, вызывая уже загруженную ошибку.
Если да, то это нежелательное поведение. Потому что теперь у вас никогда не будет java-библиотеки с общей библиотекой в одном и том же процессе, используемой более одного раза.
[править] Я обнаружил, что каждый apk использует свой собственный загрузчик классов (также в одном процессе). Это означает, что каждый класс JL будет загружен для каждого apk, и поэтому каждый общий объект будет загружен более одного раза, что приведет к ошибке. У кого-нибудь есть идеи, как это обойти? Можно ли разрешить apks совместно использовать загрузчик классов?