2016-12-22 2 views
5

У меня есть проект, который содержит много чертежей, имена которых начинаются с «a» или «b» (например, a1_back, a2_back, b1_start, b2_start и многие-многие другие). Этот вводимый коэффициент не используется в коде, но используются следующим кодом:Android: сделайте «shrinkResources true», чтобы сохранить все чертежи, но удалите другие неиспользуемые ресурсы

String name = image.getName();//getName() returns for examle "a1_back" 
res = getResources().getIdentifier(name, "drawable", getPackageName()); 

Так, нигде в коде у меня есть конкретные строки «a1_back» используется. Поэтому, когда я устанавливаю «shrinkResources true« все мои чертежи, начинающиеся с «a» и «b», удаляются.

Я читал, что вы можете указать, какие ресурсы следует продолжать использовать следующий файл XML:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:tools="http://schemas.android.com/tools" 
    tools:keep="@layout/l_used_c" 
    tools:discard="@layout/unused2" /> 

Но у меня есть путь ко многим и не вводимого коэффициента не требуется указать каждый из них по отдельности. Есть ли способ установить шаблон в «tools: keep» (чтобы сохранить все чертежи, начинающиеся с «a» или «b»), или, возможно, сохранить все чертежи в проекте, но удалить другие неиспользуемые ресурсы?

Заранее благодарен! :)

+0

, если вы имеете дело только с ресурсами, Android студии есть возможность нажать на ** Refactor ** >> ** Удалить Неиспользуемые ресурсы **. –

+0

Да, но я не хочу, чтобы мои чертежи были удалены! Я хочу сохранить их, но удалю все остальное. – hkop

+0

Запустите удаление неиспользуемых ресурсов, затем используйте свою программу управления версиями для восстановления чертежей. – nasch

ответ

1

Существует обходное решение, которое вы можете использовать. Добавить префикс для всех, которые вы вводимого коэффициента хотите сохранить

@Nullable 
private Drawable getDrawableByName(@NonNull final Context context, @NonNull final String name) { 
    final String prefixName = String.format("prefix_%s", name); 
    return getDrawable(context, prefixName); 
} 

@Nullable 
protected Drawable getDrawable(@NonNull final Context context, @NonNull final String name) { 
    final Resources resources = context.getResources(); 
    final int resourceId = resources.getIdentifier(name, "drawable", context.getPackageName()); 
    try { 
     return resources.getDrawable(resourceId, context.getTheme()); 
    } catch (final Resources.NotFoundException exception) { 
     return null; 
    } 
} 

Хитрость здесь

final String prefixName = String.format("prefix_%s", name); 

ресурсов анализирует сокращение механизм, который все с «вводимого коэффициента prefix_» может быть использован и не трогать эти файлы ,

2

При доступе к ресурсу динамически использовать этот трюк, как описано в Android User Guide, используя этот пример

String name = String.format("img_%1d", angle + 1); 
res = getResources().getIdentifier(name, "drawable", getPackageName()); 
Смежные вопросы