2016-04-22 2 views
0

Я пытаюсь выполнить библиотеку jGit на устройстве Android. Я хочу создать локальный репозиторий.Использование jGit на устройстве Android

Этот код работает на ПК:

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

Exception на Android устройства:

FATAL EXCEPTION: main 
Process: com.examplecompany.gitexample, PID: 2036 
java.lang.IllegalStateException: Could not execute method of the activity 
    at android.view.View$1.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$1.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 

Где проблема? Может быть, я использую неправильную библиотеку?

+0

У вас установлена ​​git на нашем устройстве Android? Я так не считаю. – CodeWizard

+0

Нет, у меня нет git, установленного на устройстве Android ... Какие шаги необходимо предпринять для создания локального репозитория на Android-устройстве? – Orgatres

ответ

1

Есть некоторые клиенты android для Git.

Вот неполный список этих инструментов:

Еще одно приложение от рынка:

+0

Это печально ... – Orgatres

+0

Мне жаль, но вы ничего не можете сделать. Git только отправляется на win/unix/mac и т. Д., Но не для мобильных платформ. – CodeWizard

+1

Спасибо за пояснение) – Orgatres

1

Это можно сделать! Посмотрите на исходный код agit application, который предоставляет git-клиент для Android.

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

И это, вероятно, имеет некоторые ограничения, т. Е. Поддержка фиксации/записи на данный момент, но по крайней мере она может показать, как возможен базовый доступ, и, вероятно, вы сможете построить его там, если вам нужно больше возможностей.

Смежные вопросы