android - 如何将 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)
解决方案
似乎 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 的方法从中。
推荐阅读
- javascript - 基本 Babel 转换因堆栈跟踪而失败
- python - 如何在没有固定宽度字段组织的情况下对输入进行排序?
- c# - 如何从 xaml 中的 ItemTemplate 访问在代码中定义的用户控件的依赖项属性?
- python - 端口未公开,但仍可在内部 docker 网络上访问
- sql - 从带有外键的 3 个表中选择
- ios - iOS 蓝牙 - 如何知道配对何时完成
- docker - Heroku 使用 Docker 部署,无法登录?
- ios - 使用 Swift Realm Results<> 或 List<> 实例时,如何避免延迟或调整 coordinator.drop 的时间?
- java - 是否有 Math.floorDiv(a, b),但对于 BigInteger?
- r - 为什么我无法使用 rvest 提取此表?