Контроль учётных записей и Java

Я хотел бы добавить некоторые подробности об использовании Proguard с Android Studio и Gradle, поскольку у меня было много проблем с удалением строк журнала из окончательного двоичного файла.

Чтобы сделать assumenosideeffects в Proguard работами, есть предварительное условие.

В вашем файле Gradle вы должны указать использование proguard-android-optimize.txt в качестве файла по умолчанию.

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

        // With the file below, it does not work!
        //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

На самом деле, в файле proguard-android.txt по умолчанию оптимизация отключена с двумя флагами:

-dontoptimize
-dontpreverify

Файл proguard-android-optimize.txt не добавляет эти строки, поэтому теперь assumenosideeffects может работа.

Затем лично я использую SLF4J , тем более, когда я разрабатываю некоторые библиотеки, которые распространяются среди других. Преимущество в том, что по умолчанию нет вывода. И если интегратор хочет какие-то выходные данные журнала, он может использовать Logback для Android и активировать журналы, чтобы журналы можно было перенаправить в файл или в LogCat.

Если мне действительно нужно удалить журналы из окончательной библиотеки, я добавляю в свой файл Proguard (после того, как, конечно, включил файл proguard-android-optimize.txt):

-assumenosideeffects class * implements org.slf4j.Logger {
    public *** trace(...);
    public *** debug(...);
    public *** info(...);
    public *** warn(...);
    public *** error(...);
}

15
задан joegester 2 July 2009 в 21:37
поделиться

2 ответа

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

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

Вот почему повышение UAC в диалоговом окне всегда инициируется нажатием кнопки, которая открывает новый диалог.

Итак, в Java world, вам просто нужно сделать то же самое, что и все остальные: снова запустить приложение и запросить повышение. Есть несколько способов запустить с повышенными правами, из которых, вероятно, самый простой - глагол «запускать от имени».

9
ответ дан 1 December 2019 в 04:34
поделиться

Похоже, Sun придется обрабатывать такую ​​ситуацию в JRE, поскольку нет другого способа выполнять действия с повышенными правами, кроме запуска внешнего процесса.

Если бы JRE поддерживала это, JVM бы вероятно, придется запустить отдельный процесс с повышенными правами для Java-кода, запрашивающего повышение.

На данный момент, однако, только манифест или запуск внешнего приложения являются единственными доступными решениями, насколько мне известно.

Вопрос в том, для чего вам нужна высота?

3
ответ дан 1 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

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