首页 > 解决方案 > 如何将 Jgit 添加到您的 Android 项目中?

问题描述

我一直在尝试将 Jgit 添加到我的 android 项目中以执行远程推送命令。我已经尝试过 ajgit 和许多其他人,但他们都不支持“远程推送”。

我尝试将源代码中的 Jgit 作为模块包含在内。遇到“Android 中不支持的 Lambda 表达式”。放弃它并从官方jgit站点下载最新的jar库并将其添加为外部库并遇到以下错误。我想这是一个外部依赖问题。

请建议我如何包含 Jgit 或任何其他允许我在我的 android studio 项目中进行“远程推送”的库,以便我可以继续进行项目的更好部分。(使用 Maven 或其他 .. 我需要的是一个快速的解决方案,因为我的工作由于这个挫折而停止了)

先感谢您。

我想执行的代码:

try{
            String httpUrl = "https://github.com/repo/branch";
            String localPath = "/sdcard/Folder1/folder2";
            Log.d("GIT","1");
            Repository localRepo = new FileRepository(localPath);
            Log.d("GIT","2");
            Git git = new Git(localRepo);
            Log.d("GIT","3");


            // add remote repo:
            RemoteAddCommand remoteAddCommand = git.remoteAdd();
            remoteAddCommand.setName("origin");
            remoteAddCommand.setUri(new URIish(httpUrl));
            // you can add more settings here if needed
            remoteAddCommand.call();

            // push to remote:
            PushCommand pushCommand = git.push();
            pushCommand.setCredentialsProvider(new UsernamePasswordCredentialsProvider("username", "password"));
            // you can add more settings here if needed
            pushCommand.call();

        }catch (Exception ex){
            imessage += "/n"+ex.getMessage();
        }

在行返回错误,

Repository localRepo = new FileRepository(localPath);


E/AndroidRuntime: FATAL EXCEPTION: Thread-4
    Process: com.crimson.studio.Ruby.Ui, PID: 3847
    java.lang.BootstrapMethodError: Exception from call site #145 bootstrap method
        at org.eclipse.jgit.util.SystemReader.getOsName(SystemReader.java:372)
        at org.eclipse.jgit.util.SystemReader.isWindows(SystemReader.java:350)
        at org.eclipse.jgit.util.SystemReader.setPlatformChecker(SystemReader.java:197)
        at org.eclipse.jgit.util.SystemReader.init(SystemReader.java:187)
        at org.eclipse.jgit.util.SystemReader.<clinit>(SystemReader.java:83)
        at org.eclipse.jgit.util.SystemReader.getInstance(SystemReader.java:160)
        at org.eclipse.jgit.util.FS$FSFactory.detect(FS.java:131)
        at org.eclipse.jgit.util.FS.detect(FS.java:306)
        at org.eclipse.jgit.util.FS.detect(FS.java:279)
        at org.eclipse.jgit.util.FS.<clinit>(FS.java:269)
        at org.eclipse.jgit.lib.BaseRepositoryBuilder.setupWorkTree(BaseRepositoryBuilder.java:657)
        at org.eclipse.jgit.lib.BaseRepositoryBuilder.setup(BaseRepositoryBuilder.java:589)
        at org.eclipse.jgit.internal.storage.file.FileRepository.<init>(FileRepository.java:151)
        at org.eclipse.jgit.internal.storage.file.FileRepository.<init>(FileRepository.java:165)
        at com.crimson.studio.Ruby.VulkanActivity.showAlert(VulkanActivity.java:58)
     Caused by: java.lang.ClassCastException: Bootstrap method returned null
        at org.eclipse.jgit.util.SystemReader.getOsName(SystemReader.java:372) 
        at org.eclipse.jgit.util.SystemReader.isWindows(SystemReader.java:350) 
        at org.eclipse.jgit.util.SystemReader.setPlatformChecker(SystemReader.java:197) 
        at org.eclipse.jgit.util.SystemReader.init(SystemReader.java:187) 
        at org.eclipse.jgit.util.SystemReader.<clinit>(SystemReader.java:83) 
        at org.eclipse.jgit.util.SystemReader.getInstance(SystemReader.java:160) 
        at org.eclipse.jgit.util.FS$FSFactory.detect(FS.java:131) 
        at org.eclipse.jgit.util.FS.detect(FS.java:306) 
        at org.eclipse.jgit.util.FS.detect(FS.java:279) 
        at org.eclipse.jgit.util.FS.<clinit>(FS.java:269) 
        at org.eclipse.jgit.lib.BaseRepositoryBuilder.setupWorkTree(BaseRepositoryBuilder.java:657) 
        at org.eclipse.jgit.lib.BaseRepositoryBuilder.setup(BaseRepositoryBuilder.java:589) 
        at org.eclipse.jgit.internal.storage.file.FileRepository.<init>(FileRepository.java:151) 
        at org.eclipse.jgit.internal.storage.file.FileRepository.<init>(FileRepository.java:165) 
        at com.crimson.studio.Ruby.VulkanActivity.showAlert(VulkanActivity.java:58)

标签: androidandroid-studiogithubjgit

解决方案


似乎 JGit 不是为在 Android 上使用而构建的,因此在启动期间会导致一些更深层次的问题。

有一些现有的适用于 Android 的 Git 客户端应用程序,请参阅例如https://www.hongkiat.com/blog/guide-to-using-git-on-android/https://livablesoftware.com/mobile-apps-git -github-android-iphone/,但它们提供了一个单独的应用程序,用于在 Android 上使用 Git,而不是包含在您的项目中的库。

我确实只找到了https://github.com/rtyley/agit它提供了在 Android 上使用 Git 的源代码,虽然它已经有一段时间没有维护了,但是你仍然可以在你的应用程序中提取一种使用 Git 的方法从中。


推荐阅读