Android stüdyosu build.gradle'a harici proje ekle


140

Aşağıdaki kurulum ile örnek bir projem var:

/root
  + Pure Java Lib
  + Android Test Lib
  + Android Test Project

' Test Projesi'nin ' Test Lib 've sonuncusu' Pure Java Lib 'e bağlıdır. Projeyi derlemek ve bu kurulumu başlatmak gayet iyi çalışıyor.

Şimdi önceki Eclipse çalışma alanımı içe aktarmayı ve Android stüdyosuyla çalışmayı düşünüyorum, sorun proje kurulumunun farklı olması ve bu şekilde tutmak istiyorum.

örneğin, önceki örneği kullanacaksanız:

/root
  + Android Test Lib
  + Android Test Project

/Some Other folder (another repository for example)
  + Pure Java Lib

Birçok yapılandırma denedim, ancak üst klasör kapsamı dışında bir projeye başvurmak için bir yol bulamadım ( örnek durumda ' kök ').

Birçok platformda / modülde klasörlerde yukarı çıkmak için '..' kullanabilirsiniz ama bu benim için işe yaramadı, belki de yanlış kullandım.

Gradle ile bunun nasıl başarılabileceğini bilen var mı?

GÜNCELLEME

Daha genel olmaya çalışacağım:

/C:/

  /Project A
    + Module 1 - Pure Java
    + Module 2 - Android Test Lib
    + Module 3 - Android Test Project

  /Project B
    + Module 1 - Pure Java
    + Module 2 - Pure Java
    + Module 3 - Pure Java

Ben Modül 1 kullanmak istiyorum proje B , proje A'da .


GÜNCELLEME: 09-03-19

Bunu şimdi gördüm ve güncellemeliyim ... neredeyse 6 yıl sonra, bugün daha akıllıyım ve sorunun "gerçeğin kaynağı" kavramını yanlış anladığımı kesinlikle söyleyebilirim.

Bir kütüphaneye bir ref sahip olmak güzel bir konsepte sahip olmaktır .. ve bir "hakikat kaynağı" gibi görünebilir, GERÇEK "Hakikat kaynağı" her projenin o kütüphanenin kullandığı kodun versiyonu olabilir, çünkü kütüphanenin kendi sürümleri vardır .. birçok sürümü bir "Gerçeğin Kaynağı" kütüphaneyi kullanan proje ile ilgilidir.

Doğru yol, çoğu geliştiricinin sevmediğini kullanmaktır ve bu da git alt modülleridir ve evet, her projedeki kaynakları çoğaltmak, her projenin kodun farklı bir sürümünü kullanmasına neden olur.

Bununla birlikte, tüm projelerinizin tüm kütüphanelerinizin en son ve en büyük sürümünü kullanmasını hedeflemeniz gerekir.

Bunun kütüphane kaynaklarıyla bir proje geliştirmenin doğru yolu olmasının nedeni, bu ölçeklerin ... her biri kendi kütüphane yapılandırmasına sahip yüzlerce projeye sahip olmanızdır.


4
Bu sorunun biraz dikkat çektiğini görüyorum ... Gerçekten çok zor denedikten sonra, şu an için Android stüdyosundan vazgeçtim, çünkü inşa etmeye çalıştığım kurulumun karmaşıklığı çok fazlaydı ve son projemi oluşturmak yapılabilirdi, ama son derece dengesiz. Android stüdyosunun her açılışında tekrar bazı parametreler ayarlamak zorunda kaldım ve manuel olarak yapının çalışmasına neden oldum. pes ettiğimden bu yana yaklaşık iki ay geçti ve umarım işler daha iyidir!
TacB0sS

Yaklaşım 2, bunun nasıl kolayca yapılacağını açıklar: stackoverflow.com/questions/25610727/…
Doron Ben-Ari

Yanıtlar:


222

Bazı Diğer Klasörlerin bir not projesi olduğunu varsayarsak, settings.gradle dosyanıza aşağıdakine benzer bir şey ekleyebilirsiniz:

include ':module1'
project(':module1').projectDir = new File(settingsDir, '../Project B/Module 1')

1
SomeOtherFolder bir proje klasörüne işaret ediyor ve içinde Android Lib projesine modül olarak eklemek istediğim modüller var
TacB0sS

Ayarları dir 'root' işaret Başka bir projede başka bir modüle bir seviye daha yüksek almak gerekir.
TacB0sS

bundan sonra alt modülleri ekleyebilir misiniz? include ': someDiğerKlasör: proj1'
Ethan

1
bazı ayrıntılarla güncellendi. settings.gradle olmalıdır / Proje A
Ethan

5
Mükemmel cevap. AS 1.0.2'de ayrıca aşağıdakileri de yapmam gerekiyordu: Sağ tıklama modülü -> Modül Ayarlarını Aç -> Bağımlılıklar -> + (alt), Modül Bağımlılığı'nı seçin, listeden kitaplığınızı seçin, Tamam'ı tıklayın :)
T Coutlakis

49

Dosya ayarlarınızı koymanız gerekir. Bu satırları sıralayın:

include ':module2'
project(':module2').projectDir = new File(settingsDir, '../Project 2/Module2')

Sonra da eklemek zorunda builde.gradle (Modül: uygulaması) içinde bağımlılıkları ağacın, bu hat:

implementation project(':module2')

ya gitmek Proje Yapısı > uygulama > Bağımlılıklar , tıklayın Ekle , seçim 3 Modül bağımlılıklar ve modülü seçin


1
Ana uygulamadan kütüphanenin sınıflarına başvurma konusunda sorun yaşıyorsanız, bunun nedeni kütüphanenin muhtemelen farklı varyantlarda gelmesidir. Yani, sadece düzgün bir şekilde bağımlılık belirtin: compile project(path: ':library', configuration: 'variant'). Burada, kütüphane dosyasından variantoluşur flavorve buildTypekütüphane tarafından tanımlanır build.gradle. Örneğin, releasebir developlezzet içinde kütüphane türü oluşturmak istiyorsanız , o variantzaman developRelease.
Sevastyan Savanyuk

9

Gradle 1.10 ile (bunun hangi diğer sürümler için geçerli olacağını bilmiyorum) burada verilen yanıta dayanarak bulduğum şey http://forums.gradle.org/gradle/topics/reference_external_project_as_dependancy

Bir api kütüphane projem, ortak bir kütüphane projem ve ana uygulama projem var. Her biri bağımsız bir geliştirme projesidir ve iki kütüphanenin birden fazla uygulama arasında paylaşılması amaçlanmıştır.

Ortak proje için settings.gradle:

def apiLibDir = file('../android-api/android-api-lib')
def rootProjectDescriptor = settings.rootProject
settings.createProjectDescriptor(rootProjectDescriptor, 'android-api-lib', apiLibDir)
include ':android-api-lib'

Ardından ana uygulama projesi ayarlarında.

def apiLibDir = file('../android-libs/android-api/android-api-lib')
def rootProjectDescriptor = settings.rootProject
settings.createProjectDescriptor(rootProjectDescriptor, 'android-api-lib', apiLibDir)
include ':android-api-lib'

def commonLibDir = file('../android-libs/android-common/android-common-lib')
settings.createProjectDescriptor(rootProjectDescriptor, 'android-common-lib', commonLibDir)
include ':android-common-lib'

İlgili build.gradle dosyalarının her birinde, onlara başka herhangi bir proje bağımlılığında olduğu gibi settings.createProjectDescriptor'da verdiğiniz adla atıfta bulunursunuz:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':android-api-lib')
    compile project(':android-common-lib')
}

Bu işe yarıyor gibi görünüyor. Api kütüphanesini tanımlayan birden fazla DEX dosyası için bir hata bile atmadı, sanırım çünkü hepsi aynı inşa sürecinin bir parçasıydı ve Gradle hepsini anlayacak kadar akıllıydı.


2
Bunu denemeye devam ediyorum ama sorun ilgili kütüphanedeki bağımlılıklar asla yüklenmiyor gibi görünüyor. Bu yüzden sadece açık kütüphanem varsa iyi görünüyor ama ana uygulamadan denediğimde, ithal edilen tüm kütüphanelerin eksik olduğunu söylüyor.
Çek teknolojisi

@Zeknoloji Aynı sorun vardı. Çözüldü. Bu cevap için
yorumuma bakın

9

Projeye sağ tıklayın - "Modül Ayarlarını Aç" ı seçin - Sol bölmede "Modüller" i seçin - Üstte "+" sembolüne tıklayın - "Modülü İçe Aktar" ı seçin.

Modülü içe aktardıktan sonra. Mevcut projeniz için bir bağımlılık olarak eklemeniz gerekir.

Sol panelde "Modülleri" Seçili tutun ve projenize tıklayın - Şimdi bağımlılıklar sekmesine gidin ve altta bulunan "+" sembolüne tıklayın - Üçüncü seçenek "Modül Bağımlılıkları" nı seçin ve projenizi doğru bir şekilde içe aktardıysanız, mevcut projenize bir bağımlılık olarak eklenebilecek tüm mevcut modülü gösterir.


Bu neredeyse işe yarıyor ... proje yapılamıyor çünkü bağımlılık modülünün çıktısı tam olarak benim asıl sorunum olan build.gradle dosyasına eklenmiyor.
TacB0sS

Gradle ile düşünüyorum, tüm projeleri aynı kök klasöre koymanız gerekir. Bunu dene. Bağımlılık olarak eklemek istediğiniz projeyi geçerli projenizle aynı klasöre yerleştirin.
Varundroid

Android Studio ile çalışmak istiyorsanız ATM'den başka kimsenin yapmak istemediği şey budur, işlerin çalışmasını sağlamanın yolu budur. Takip ettiğim diğer bir alternatif yol ise, tüm bağımlılıkları Intellij kurulumunda proje oluşturmak ve daha sonra bu projeyi Android stüdyosuna aktarmak, bunu yaparak Android Studio'yu Gradle yerine ant build sistemi kullanmaya zorluyorum. Umarım yardımcı olur. Alkış !!
Varundroid

1
@Varundroid, çözüm önce Ethan'ın cevabını kullanarak bağımsız kütüphaneye bir referans almaktır. Ardından cevabınızı kullanarak modülü ana uygulamanın bağımlılıklarına ekleyin. Bu, kitaplık kodunu çoğaltmak zorunda kalmadan aynı kitaplığa birden fazla uygulamada başvurmanıza olanak tanır.
bcorso


-1

Ethan'ın dediği gibi, bunu settings.gradle öğesine eklerseniz, Android Studio'ya harici bir proje ekler (bu örnekte, üst klasörde bulunur):

project(':../ProjectB/:module1')

Ardından, projelerinizden birine bağımlılık olarak eklemek için, projenin build.gradle dosyasına böyle bir başka bağımlılık olarak ekleyin ( burada olduğu gibi grafik olarak da yapabilirsiniz ):

compile project(':../ProjectB/:module1')
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.