Как программно показать текущую ветку Git в приложении Android? - PullRequest
2 голосов
/ 27 октября 2011

Я хочу показать текущую ссылку на Hash / Branch репозитория GIT в диалоговом окне About моего приложения для Android.Я могу скопировать его вручную, но гораздо интереснее сделать это программно.

У меня есть библиотека для моих приложений, поэтому мои действия и мои приложения наследуются от моих собственных библиотечных классов.Итак, я подумал добавить метод [getGitHash ()] в мой класс библиотечного приложения.Я могу сослаться на текущую ветку, прочитав .git / HEAD, на которую фактически ссылается файл res / raw в проекте Eclipse (посмотрите здесь , чтобы увидеть, как это делается).Мой проект сейчас имеет ресурс R.raw.HEAD.

Но теперь библиотека не может ссылаться на R.raw.HEAD, поэтому я не могу реализовать метод в библиотеке.Метод в библиотеке должен выглядеть примерно так:

public static String getGitHash(int nDigits) {

    String hash = "";
    SB_ResourceReader.LoadRAWFile(R.raw.HEAD,SB_Application.getContext());
    return hash;
}

.LoadRAWFile () - статический метод для чтения необработанного содержимого файла, а SB_Application.getContext () - еще один статический метод для извлечения ... ну,контекст приложения.

Возможно ли, чтобы библиотека «поверила», что будет определенный ресурс, хотя он недоступен при компиляции?

Надеюсь, я объяснил себе: S

Спасибо!

Ответы [ 3 ]

2 голосов
/ 27 октября 2011

Если вы используете eclipse, попробуйте следующее: добавьте папку .git в качестве исходной папки, а в качестве шаблона включения просто напишите «HEAD».Это приведет к тому, что файл HEAD будет сохранен как ресурс (не ресурс Android!) В банке.Вы можете получить к нему доступ, используя метод getClass (). GetResourceAsStream ("/ HEAD"):

    try {
        InputStream is = getClass().getResourceAsStream("/HEAD");
        byte buff[] = new byte[256];
        int len = is.read(buff);
        String s = new String(buff, 0, len);
        System.out.println("!!! HEAD: " + s);
    } catch (Exception e) {
        e.printStackTrace();
    }
1 голос
/ 07 февраля 2017

Проще (без какого-либо плагина), вы можете достичь этого, установив новый ресурс в вашем app.gradle, например, так:

android {
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1"
        resValue "string", "gitBranch", gitBranch()
    }
    buildTypes {...}
}


def gitBranch() {
    def branch = ""
    def proc = "git rev-parse --abbrev-ref HEAD".execute()
    proc.in.eachLine { line -> branch = line }
    proc.err.eachLine { line -> println line }
    proc.waitFor()
    branch
}

Таким образом, у вас будет доступ к новой строкересурс

getString(R.string.gitBranch)
0 голосов
/ 27 октября 2011

Таким образом, способ сделать это состоит в том, чтобы сделать это в вашем файле сборки ant. Вы должны проверить различные задачи ant file . Я думаю, что в вашем случае ReplaceRegEx именно то, что вам нужно. Поместите в файл некую уникальную строку, в которую вы хотите поместить текущую ветку git, запустите команду, чтобы получить текущую ветку git, и замените уникальную строку выводом этой команды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...