热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

集成外部纯Java库并对其进行Android类访问

如何解决《集成外部纯Java库并对其进行Android类访问》经验,为你挑选了1个好方法。

我在尝试获取外部Java项目时遇到了麻烦,因此我也可以在其上使用Android类.该库已集成在Android项目中.例如:我有几个我想要实现的模型类,Parcelable因此它们可以相应地进行串行化,但是没有一个Android类可用.

澄清我只是为了试图解决这个问题而这样做

到目前为止我只尝试过:

更改和匹配外部库的包:

Android中的包名称

com.domain.androidproject

图书馆的包最初

com.domain.libproject

变成:

com.dommain.androidproject.libproject

但到目前为止没有运气.我将库导入为Gradle外部项目vía:

compile project(path: ':LibProject')

谢谢您的帮助.



1> Fco P...:

你必须在纯Java库和android之间定义一个绑定.您可以使用依赖注入来使用类签名注入模型,然后在应用程序内部(或插入另一个项目,如插件)中定义parcelable模型.或者你可以使用泛型来实现相同的功能.请记住,因为java库已经编译,从技术上讲,你不能通过将它导入android项目来改变它(我看到人们从一个依赖项"重写"一些文件,然后用整个原始路径添加它们欺骗类路径,但这是非常危险的,因为你不能与依赖的代码的其余部分进行交互,如果有什么变化,事情就会破坏).

如果您可以访问纯java的库源代码,则将其修改为使用工厂或模型提供者.如果没有,请扩展模型,添加parcelable支持,并尝试使用它们而不是原始模型类.

例:

让我们假设我们有一个模型和一些使用它的函数:

public class myModel{

    private int id;
    private String name;

    public void setId(int id){
        this.id = id;
    }

    //more getters and setters
}

public interface myModelCreator{
    public myModel create(T toModel);
    public T uncreate(myModel fromModel);
}

public static void doSomething(myModel model){
    //some library operations
}

现在,在android项目中:

public class myAndroidModel extends myModel implements Parcelable{
    /*Implements the parcelable methods using the class accessors, or you can change the myModel members to protected.*/
}

public class myAndroidModelCreator implements myModelCreator{

    @Override
    public myModel create(myAndroidModel toModel){
        //create the myModel using the parcelable class.
    }

    @Override    
    public myAndroidModel uncreate(myModel fromModel){
        //reverse operation.
    }

}

现在,在android项目中,您可以在任何地方使用parcelable子类,并且每次需要调用库时,您都可以使用parcelables作为参数提供创建者接口.另一种方法是将库方法签名更改为以下内容:

public static void doSomething(T model){
    //some library operations
}

所以你可以直接使用parcelable子类.但是,根据您的层次结构,这可能是不可能的.最后,您可以尝试使用Android项目中的Guice和Roboguice在java项目中实现依赖注入.由于roboguice使用guice,它们可以互操作,但这是一个很长的镜头.


推荐阅读
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • C语言中全部可用的数学函数有哪些?2.longlabs(longn);求长整型数的绝对值。3.doublefabs(doublex);求实数的绝对值。4.doublefloor(d ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 在分析Android的Audio系统时,我们对mpAudioPolicy->get_input进行了详细探讨,发现其背后涉及的机制相当复杂。本文将详细介绍这一过程及其背后的实现细节。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
author-avatar
幽幽独舞99
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有