2016-12-03 2 views
0

Мое приложение зависит от удаленного пакета, размещенного в репозитории сервера. Пакет поддерживается независимо.Android Как переопределить класс в удаленном пакете с локальным классом

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

Однако компиляция приложения по-прежнему использует удаленный класс вместо локальной расширенной копии. И сообщать об ошибках.

error: cannot find symbol variable XXX_XX1 
error: cannot find symbol variable XXX_XX2 

тех переменные XXX_XX1 и XXX_XX2 недавно добавлены к местному CLASSA

удаленной репо библиотеки: org.example.packagename.datamodel.classA

Локальный исток \ Android \ приложение \. src \ mock \ java \ org \ example \ packagename \ datamodel \ classA.java

Мой вопрос в том, как спросить Android Studio использовать локальную копию класса А вместо удаленной во время компиляции?

UPDATE

После более тщательного изучения, только те классы ошибок отчетов папки модульного тестирования. И основные классы программы не сообщают об ошибках (все же, возможно, это будет после компиляции классов тестирования).

Error:Execution failed for task ':app:compileMockDebugUnitTestJavaWithJavac'. Compilation failed; see the compiler error output for details. 
+0

У вас есть библиотека? – Karakuri

+0

@ Karakuri Я являюсь автором, но не единственным владельцем. – HarryQ

+0

Итак, вы пытаетесь проверить изменения, внесенные в библиотеку, но для этого вам нужно скомпилировать вашу локальную версию, а не опубликованную версию, которую вы можете получить из jcenter/maven central/etc. Правильно ли я понял вашу проблему? – Karakuri

ответ

0

Вы должны степень класс в библиотеке (с использованием композиции также вариант, если класс является окончательным)

public class LocalClassA extends RemoteClassA { 
} 

как можно было бы назвать ClassA, так как они будут находиться в разных пакетах, но это может привести к путанице.

+0

В настоящее время классA широко используется в приложении, поэтому размещение их в разных пакетах требует изменения зависимостей в десятке других файлов. То, что я пытаюсь достичь, похоже на выбор вкуса сборки, но между локальным классом A и удаленным классом A. – HarryQ

0

Одним из довольно простых способов сделать это было бы добавить модуль в тестовый проект, исходные файлы которого являются вашей модифицированной версией библиотеки. Затем вы удалите бинарную зависимость и замените ее зависимостью от этого нового модуля. Это должно выглядеть примерно так ...

В settings.gradle добавить

include ':libraryName' 
project(':libraryName').projectDir = new File('/path/to/library/sources') 

В build.gradle для приложения

// compile 'groupId:artifactId:version' // <-- comment out the published binary 
compile project(':shared') // <-- add your local module 

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


Другой подход, который я взял в прошлом, чтобы использовать Maven Gradle плагин для публикации библиотеки в мой локальный репозиторий Maven (с новым названием версии).Затем в тестовом проекте я бы изменить название версии, а также добавить

repositories { 
    mavenLocal() 
} 

Это может быть немного более сложным, но имеет то преимущество, что не возиться с модулями - you're все еще тянет в бинарной зависимости, он просто обслуживается локально из вашего репозитория maven, а не загружается из Интернета. Вам просто нужно запомнить не, чтобы зафиксировать любые изменения, внесенные вами в источник библиотеки, и создать файлы, связанные с публикацией локально.