4

Как сделать ресурсы (строка, размер, цвет и т. Д.) В моем модуле библиотеки Android частным?Как сделать ресурсы библиотеки Android частными?

Я пытался как документированные способы сделать это, и ни работы ...

  1. После official Android doc создания res/values/public.xml не работает; все ресурсы остаются общедоступными в приложении, которое использует эту библиотеку.
  2. Chris Banes's instruction (и подтверждено в this StackOverflow answer) создания папки res-public/values/public.xml также не работает; все из Ресурсы являются закрытыми, но те, что указаны в файле public.xml , не размещаются на общедоступных страницах, как они должны быть.

У кого-нибудь есть окончательные инструкции по тому, как частные ресурсы библиотеки? Есть ли там библиотеки с открытым исходным кодом, которые должным образом сделали свои ресурсы частными?

Я использую ...

  • Android Studio v2.2.3
  • buildToolsVersion "24.0.2"
  • com.android.tools.build:gradle:2.2.3
+1

'appcompat-v7' использует это. Если вы посмотрите в AAR, вы увидите 'public.txt', который создается на основе этой информации, и [он использует' res-public'] (https: // github.ком/Android/platform_frameworks_support/дерево/хозяин/v7/AppCompat/Рез-общественные/значения). Ditto [библиотека поддержки дизайна] (https://android.googlesource.com/platform/frameworks/support/+/master/design/res-public/values) и [ее преемник 'material-android'] (https://github.com/material-components/material-components-android/tree/master/lib/res-public/values). – CommonsWare

+0

Спасибо, @CommonsWare. Эти ссылки помогли мне разобраться в моей проблеме ... У меня был неправильный путь, когда я ссылался на папки 'res' и' res-public' в моем build.gradle 'sourceSets'. – Gus

ответ

1

Вариант № 2 на самом деле работает. Я не правильно определить мой sourceSets в моем build.gradle ...

sourceSets { 
    main.res.srcDirs = [ 
     'src/main/res', 
     'src/main/res-public' 
    ] 
} 
+1

Не могли бы вы поделиться этим решением? Это не работает для меня :( – Slava

2

Ваши ресурсы считаются открытыми в любом модуле (библиотека, и т.д.), если не начать, явно, объявляя любой ресурс в модуле для быть публичным. В этот момент вы в основном выбираете, чтобы каждый ресурс (внутри модуля) был закрытым, за исключением того, что вы отмечаете как общедоступный. Это сохраняет обратную совместимость и позволяет вам постепенно увеличивать доступ к крупным проектам со многими модулями.

Чтобы сделать все ресурсы приватными, просто добавьте < public/> в любой из существующих файлов ресурсов.

В приведенном выше ответе говорится о добавлении определенного каталога ресурсов только для управления общедоступными/частными модификаторами. Хотя это работает, я мог бы предложить вам управлять видимостью и декларацией в основных файлах ресурсов рядом с тем, где они объявлены. Вот пример файла ресурсов strings.xml, который я использовал с новым модулем библиотеки. Префикс public/private в именах строк предназначен только для иллюстрации.

Рез/значение/strings.xml

<resources> 
    <string name="app_name">My Library2</string> 

    <public type="string" name="public_string_in_lib2" /> 
    <string name="public_string_in_lib2">public string in lib2</string> 

    <string name="private_string_in_lib2">private string in lib2</string> 
</resources> 

По сути, эти качества используются для создания public.txt файла, который встроен в AAR, который будет зависел от другого модуля. Различные компоненты инструмента, такие как Android Studio, будут использовать эту информацию для флага/предупреждения, но технически, потребителю библиотеки не помешают использовать ресурс, если их инструменты не являются действительно строгими.

Смежные вопросы