Страницы

Поиск по вопросам

воскресенье, 22 декабря 2019 г.

Запрет доступа файлам одного пакета к файлам другого пакета

#android #access #package


Здравствуйте, в ходе разработки приложения под андроид возникла следующая проблема:

имеются java файлы которые предназначены для реализации логики для подключения к
устройству типа1 они лежат в package Device1 (внутри этого пакета находятся также подпакеты),
другие java файлы лежат в package Device2.

В каждом пакете (Device1, Device2) имеются java файлы с одинаковым названием например
Func. Пакеты Device1, Device2 должны работать не зависимо друг от друга. Т.е. файлы
пакета Device1 не могут ссылаться на Func из пакета Device2 и наоборот.

Также есть еще пакет CommonConnection, который реализует первоначальное подключение
к пакетам Device1, Device2. В этом случае пакет CommonConnection должен иметь доступ
ко все остальным пакетам и Device1 и Device2. 

Можно ли как-то запретить файлам из пакета Device1 ссылаться на файлы из пакета Device2
и наоборот, чтобы по ошибке при вводе автодополнения не ввести файл из чужого пакета,
при этом чтобы общий пакет CommonConnection имел доступ и к файлам пакета Device1 и
к файлам Device2 ?

Заранее благодарю всех за ответы.



Создал модули Device1, Device2, CommonConnection.
В build.gradle для CommonConnection ввел зависимости  для
Device1, Device2 в итоге получил ошибку.





Резюмирую здесь решение моей задачи, возможно кому-то пригодиться в будущем:

1) Создаем 3 моудля CommonConnection, Device1, Device2. Нам необходимо, чтобы файлы
в CommonConnection имели доступ в Device1, Device2. А Device1, Device2 были изолированы
друг от друга, т.е. файл из Device1 не мог иметь доступ в Device2.
2) После создания модулей необходимо зайти в gradle для Device1 и внести следующие
изменения:

    **apply plugin: 'com.android.application'** 


изменить на
         apply plugin: 'com.android.library' 

И в defaultConfig убрать строку 
        applicationId "com.bignerdranch.android.Device1"



3) Для Device2 нужно сделать тоже самое. 
4) В gradle файле для CommonConnection нужно добавить строку
compile project(':Device1')



5) Далее нужно явно указать что нужно запускать первоначально именно активити модуля
CommonConnection. Нажимаем на Select Run/Debug Configuration и выбираем модуль CommonConnection.
Далее еще раз нажимаем на Select Run/Debug Configuration -> EditConfigurations.. **
в меню **Launch Options в строке Activity жмем на ... и выбираем активити для CommonConnection
в частности MainActivityCommonConnection.



6) Теперь можно запустить проект и проверить.
    


Ответы

Ответ 1



Ну просто не делайте эти классы public и они будут видны только в рамках пакета. А лучше вынесите эти пакеты в разные модули проекта.

Комментариев нет:

Отправить комментарий