Android 设备上的 jGit 使用情况

jGit usage on Android device

我正在尝试在 Android 设备上执行 jGit 库。我想创建本地存储库。

该代码可在 PC 上运行:

File fRepositoryDir = new File("D:/My/jgittestrpo");
if (!fRepositoryDir.exists()) {
    fRepositoryDir.mkdirs();
}

Repository localRepo;
Git git;
try {
    localRepo = new FileRepository(fRepositoryDir.getAbsolutePath() + "/.git");
    localRepo.create();
} catch (Exception e) {
    e.printStackTrace();
}

Android 设备上的相同代码无法正常工作:

File fRepositoryDir = new File(getFilesDir().getAbsolutePath() + File.separator + "repository");
//File fRepositoryDir = new File(Environment.getExternalStorageDirectory() + File.separator + "repository");    // Trying on sd card, not working too
if (!fRepositoryDir.exists()) {
    fRepositoryDir.mkdirs();
}

Repository localRepository;
try {
    localRepository = new FileRepository(fRepositoryDir.getAbsolutePath() + File.separator + ".git");
    //localRepository = new FileRepository("/data/data/com.examplecompany.gitexample/files/repository/.git");           // Trying to set repo folder directly
    localRepository.create();
} catch (Exception e) {
    e.printStackTrace();
}

Android 设备异常:

FATAL EXCEPTION: main
Process: com.examplecompany.gitexample, PID: 2036
java.lang.IllegalStateException: Could not execute method of the activity
    at android.view.View.onClick(View.java:3823)
    at android.view.View.performClick(View.java:4438)
    at android.view.View$PerformClick.run(View.java:18422)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5001)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at android.view.View.onClick(View.java:3818)
    ... 11 more
 Caused by: java.lang.VerifyError: org/eclipse/jgit/internal/storage/file/ObjectDirectory
    at org.eclipse.jgit.internal.storage.file.FileRepository.<init>(FileRepository.java:221)
    at org.eclipse.jgit.internal.storage.file.FileRepository.<init>(FileRepository.java:145)
    at org.eclipse.jgit.internal.storage.file.FileRepository.<init>(FileRepository.java:159)
    at com.examplecompany.gitexample.MainActivity.onLoginClick(MainActivity.java:173)
    ... 14 more

问题出在哪里?可能是我使用了不正确的库?

Git 有一些 android 个客户。

以下是这些工具的部分列表:

来自市场的另一个应用程序:

可以做到!查看 agit application 的源代码,它为 Android.

提供了 git-client

我没有仔细查看它,但它似乎使用了 JGit 的补丁版本和存储库的不同实现 class 来避免直接文件访问,这在 [=18= 上是不可能的].

它可能有一些限制,即目前没有 commit/write 支持,但至少它可以展示基本访问是如何实现的,如果您需要更多功能,您可能可以从那里构建它.