Определение местоположения пакетов идентификатором

Решение : Исключение группы Гуава с модулем listenablefuture из текущей транзитивной зависимости

implementation("android.arch.work:work-runtime:1.0.0-alpha09") {
    exclude group: 'com.google.guava', module: 'listenablefuture' 
}

Также используйте эту конфигурацию для linkedin-sdk:

api project(path: ':linkedin-sdk') {
    transitive = true
}

[117 ] Причина :

Согласно Google Issue Tracker ,

Это неожиданно сделано нарочно! ( ссылка ) Тем не менее, скоро будет доступна новая версия Guava, что, конечно, решит проблему. На данный момент исключение, как указано выше, должно работать отлично.

6
задан Rhythmic Fistman 13 October 2008 в 13:36
поделиться

5 ответов

Совсем недавно Эндрю Мирик ответил на аналогичный вопрос в списке рассылки darwin-dev:

KextManagerCreateURLForBundleIdentifier () в может быть использования, хотя я считаю, что это только работает для кекстов, которые либо 1) загружены, или 2) в / S / L / E /. Вот снег Заголовок Leopard:

 / *!
 * @ функция KextManagerCreateURLForBundleIdentifier
 * @abstract Создает URL-адрес, содержащий кекст с заданным идентификатором пакета.
 *
 * @param распределитель
 * Распределитель, используемый для выделения памяти для нового объекта.
 * Передайте  NULL  или  kCFAllocatorDefault 
 * для использования текущего распределителя по умолчанию.
 * @param kextIdentifier
 * Идентификатор пакета для поиска.
 *
 * @result
 * CFURLRef, обнаруживающий kext с запрошенным идентификатором пакета.
 * Возвращает  NULL , если кекст не может быть найден или при ошибке.
 *
 * @discussion
 * Kexts сначала ищутся по тому, загружены ли они, а затем по версии.
 * В частности, если  kextIdentifier  идентифицирует кекст
 * который в настоящее время загружен,
 * возвращенный URL-адрес найдет этот кекст, если он все еще присутствует на диске.
 * Если запрошенный кекст не загружен,
 * или если его комплект находится не в том месте, откуда он был изначально загружен,
 * возвращенный URL-адрес будет находить последнюю версию желаемого kext,
 * если его можно найти в папке системных расширений.
 * Если версия kext не найдена, возвращается  NULL .
 * /
CFURLRef KextManagerCreateURLForBundleIdentifier (
 Распределитель CFAllocatorRef,
 CFStringRef kextIdentifier);

Обратите внимание, что до Snow Leopard может работать только для kexts в / S / L / E; то API существовал, но не было headerdoc, описывающий его поведение.

Для меня это очень хорошо сработало в Mac OS X 10.5.

3
ответ дан 8 December 2019 в 14:49
поделиться

Используйте это

NSString *path = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:@"com.apple.TextEdit"];
9
ответ дан 8 December 2019 в 14:49
поделиться

Я не думаю, что Mac OS X сохраняет глобальную базу данных всех идентификаторов пакета везде.

Как отмечено, можно найти применение довольно простым способом с NSWorkspace.

Кроме того, так как Вы использовали kext для своего примера, на Leopard (10.5) существует инструмент, названный "kextfind", который можно выполнить для поиска kexts в системной папке Exensions (kexts в других местах, не будет найден, если Вы не указываете на инструмент на те другие места). kextfind имеет много опций - видят страницу справочника для деталей - но найти kext идентификатором пакета можно сделать это:

kextfind -bundle-id com.apple.iokit.IOStorageFamily

У нас в настоящее время нет C-уровня API для поиска kexts идентификатором пакета.

Что касается взламывания пути от последнего компонента идентификатора пакета: не делайте этого. Нет ничего требующего, чтобы имя обертки соответствовало последнему компоненту идентификатора пакета, и я видел kexts (ничего для высказывания относительно других пакетов), где эти два не соответствуют.

4
ответ дан 8 December 2019 в 14:49
поделиться

Если то, что Вы ищете, является определенно kext, то Вы могли посмотреть на информационный словарь для каждого пакета в/S/L/Es/папке, пока Вы не находите Ваш. Нет никакого поиска пакета идентификатором кроме для Приложений (где LaunchServices сделает это), и загруженные пакеты, поскольку Вы уже нашли.

0
ответ дан 8 December 2019 в 14:49
поделиться

Для ответа на этот вопрос я думаю, что тот действительно должен знать, "Почему Вы смотрите идентификаторы пакета таким образом?" Если всегда существует kexts, можно искать в некоторых довольно разумных местах, если бы они - приложения, можно использовать LS, я не вижу случай, в котором Вы хотели бы сделать обоих, таким образом, я не вижу потребность иметь распространенный способ сделать это.

Нужно отметить, что у Вас может быть несколько экземпляров идентичных идентификаторов пакета на Объеме.

0
ответ дан 8 December 2019 в 14:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: