Я создал простой веб-сервер, который использует Hibernate для хранения объектов в базе данных MySQL. Кроме того, как вы можете ожидать, он разделяет некоторые библиотеки с клиентами в пакете <...>.shared>
для доступа к различным ресурсам. Среди них есть классы POJO, аннотированные аннотациями Hibernate и Jackson. Это пример класса POJO.Зачем нужны библиотеки Hibernate/Jackson для моего приложения?
@JsonInclude(Include.NON_NULL)
@Entity
@Table(name = "user", uniqueConstraints =
{ @UniqueConstraint(columnNames = "email"),
@UniqueConstraint(columnNames = "nick") })
public class User implements java.io.Serializable, RecognizedServerEntities
{
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Integer userId;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "threadAuthor",
orphanRemoval = false)
@Cascade({ CascadeType.SAVE_UPDATE })
private Set<Thread> userThreads = new HashSet<Thread>(0);
}
Теперь я пытаюсь создать приложение для Android, которые просто использовать эти общие классы: приложение не нужно знать ничего о Hibernate, javax.persistence и, может быть, даже аннотации Джексона. Однако, когда я создаю новый проект для Android, для этого требуется много библиотек.
74K hibernate-commons-annotations-4.0.5.Final.jar
5,1M hibernate-core-4.3.6.Final.jar
38K jackson-annotations-2.4.0.jar
221K jackson-core-2.4.3.jar
1,1M jackson-databind-2.4.3.jar
180K javax.persistence_2.1.0.v201304241213.jar
714K org.restlet.jar
55K shared.jar
Проблема заключается в том, что они значительно увеличивают размер приложения и замедляют процесс разработки, поскольку мне необходимо включить поддержку Multidex. Итак, как я могу решить? Я могу придумать некоторые решения:
- Измените совместно используемые классы, чтобы не выставлять аннотации. Это жизнеспособное решение? Как я могу эффективно это сделать?
- Использование ProGuard. Я не знаю, действительно ли это решение, потому что я ничего не знаю об этом инструменте, но для того, что я прочитал, он может помочь удалить классы, которые вообще не используются в проекте.
РЕДАКТИРОВАТЬ: Я частично работал над проблемой, извлекая только необходимые кассы от hibernate-core-4.3.6.Final.jar
, что является наибольшей библиотекой. Все еще ищут самые элегантные решения.
Спасибо за ваш ответ. Кстати, не могли бы вы уточнить свой ответ с помощью какого-то кода? – tigerjack89
Это зависит от того, какой подход вы предпочитаете. Если вашему клиенту действительно не нужно полное представление объекта на вашей стороне сервера, вы можете просто использовать объекты JsonNode с readTree из ObjectMapper от Jackson. –