2011-10-27 29 views
2

Androidアプリケーションの[バージョン情報]ダイアログボックスでGITリポジトリの現在のハッシュ/ブランチ参照を表示します。私は手でそれをコピーすることができますが、プログラマチックにそれを行うことははるかに面白いです。Androidアプリケーションで現在のGitブランチをプログラム的に表示するにはどうすればいいですか?

私は自分のアプリケーション用のライブラリを持っているので、私のアクティビティとアプリケーションは自分のライブラリクラスを継承しています。そこで、私は、ライブラリアプリケーションクラスにメソッド[getGitHash()]を追加することを考えました。現在のブランチを参照するには、.git/HEADを読んでください。これは、Eclipseプロジェクトの下でres/rawファイルで実際に参照されています(どのように完了したかはhere参照)。私のプロジェクトには現在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(RAWファイルの内容とSB_Application.getContextを(読むための静的メソッドです)、よく...アプリコンテキスト取得するために別の静的メソッドであります。

コンパイル時にアクセスできないが、特定のリソースが存在することをライブラリが「信頼する」ことは可能ですか?

私は自分自身を説明している願っています:S

感謝を!

+0

にアクセスすることができますプロジェクトは少し異なります。スタブファイルを作成することによって、Rの変数の値がもはや最終的ではないため、コンテンツをオーバーライドすることができます。アンドロイドアプリプロジェクトの最終的な編集では、最終的になるはずです。私はそれを試していないが、これはコンパイルのステップを回避することができますが、実際には正しいコンテンツを一貫してパッケージ化していない可能性があります。 –

+0

まあ、ありがとう!これは勉強のようなものですが、このプロジェクトでは2.2について取り組んでいますが、ICSエンティティとツールがどのように結合されているか分かりません。 –

答えて

0

これを行う方法は、antビルドファイルでスクリプトを作成することです。あなたは様々なant file tasksをチェックアウトする必要があります。私はあなたの場合、ReplaceRegExが必要なものだと思います。現在のgitブランチを置いて、現在のgitブランチを取得するためのコマンドを実行し、一意の文字列をそのコマンドの出力に置き換える、ある種の一意の文字列をファイルに入れます。

+0

ありがとう@ kurtis-nusbaum!私はアリの仕事について何かを見ましたが、私はそれをチェックアウトしませんでした。今私は完璧な言い訳をしています。基本的にあなたが言うのは、コンパイルの前のラベルの置き換えです。できるだけ早く、私はそれを試してみましょう。 –

2

eclipseを使用している場合は、以下を試してください。ソースフォルダとして.gitフォルダを追加し、インクルードパターンとして「HEAD」と書いてください。これにより、HEADファイルがJARファイルにアセットとして保存されます(アンドロイドリソースではありません)。あなたの方法getResourceAsStream(「/ HEAD」))のgetClassを(使用してアクセスすることができます。もっと簡単に(任意のプラグインなし)

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(); 
    } 
+0

できるだけ早く試してみます。ありがとう! –

1

、あなたがそうのようなあなたのapp.gradleで新しいリソースを設定することによって、これを達成することができます

私はICS、天秤座で導入された新しい開発ツールで、それを試していないながら
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) 
関連する問題