SORU
23 Mayıs 2013, PERŞEMBE


Nasıl Android Studio ve gradle ile android bir kütüphane oluşturmak için?

Eclipse projesini geçirmek için çalışıyorum ama denedim işe yaramadı. Eclipse 3 proje (2 android Uygulama Projeleri ve 1 android kütüphane projesi) var. 2 Uygulama Projeleri kütüphane projesi bağlıdır. Gradle verme ben ne zaman işe yaramayan 3 proje. Projeyi yeniden yapılanma açığım ama bu nasıl yapılabileceğine dair herhangi bir belge bulamadım.

Bir şekilde Tutulması ihracat birlikte çalışan 3 projeler yapmak var mı? Eğer öyleyse bunun nasıl yapılması gerektiği için belgeler ise, daha iyi yapılanma şeyler mıyım?

Güncelleme

Tüm proje https://github.com/respectTheCode/android-studio-library-example GitHub için yükledim

Güncelleme 1

Padma Kumar gelen önerilere göre bu denedim.

  1. Yeni bir Proje MyApp oluşturun
  2. 16'**, Android Library seçmek MyLib adı
  3. Tıklayın 19**

Yapı bu hata ile başarısız olur

Module "MyLib" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 1 error and 0 warnings in 19 sec
1 error
0 warnings
/.../MyApp/MyLib/build/bundles/debug/AndroidManifest.xml
Gradle: <manifest> does not have package attribute.

Ben daha sonra package bildirim yapmaya öznitelik ekledi

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" >

Bina sonra bu hatayı alıyorum

Module "MyApp" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 2 errors and 0 warnings in 13 sec
2 errors
0 warnings
/.../MyApp/MyLib/src/main/java/com/example/mylib/MainActivity.java
Gradle: package R does not exist
Gradle: package R does not exist

Bağımlılık ekleme hatası üzerinde herhangi bir etkisi görünmüyor. Yukarıdan devam ediyor

  1. Tıklayın 24**
  2. Dependencies Sekmesine geçin
  3. Tıklayın 26 ** MyLib seç
  4. Tıklayın Apply OK
  5. Tıklayın Build > Make Project

Güncelleme 2

Ethan gelen önerilere göre bu yok

build.gradle doğru parçaların hepsi var gibi görünüyor ve tek fark plugin orta çizgiye 2 alt proje MyApp/build.gradle.

buildscript {
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile files('libs/android-support-v4.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
}

Kök build.gradle bu gibi projeler de ekledim boştu proje

dependencies {
    compile project(":MyLib")
    compile project(":MyApp")
}

Ben şimdi oluştururken bu hata

Gradle:
FAILURE: Build failed with an exception.
* Where:
Build file '/Users/kevin/GitHub/AppPress/MyApp/build.gradle' line: 2
* What went wrong:
A problem occurred evaluating root project 'MyApp'.
> Could not find method compile() for arguments [project ':MyLib'] on root project 'MyApp'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

Güncelleme 3

Bunu çözmek için kocaman bir teşekkür Ethan.

  1. MyLib/build.gradle compile project(':SubProjects:MyLib') ekleyin
  2. MyLib/build.gradle compile files('libs/android-support-v4.jar') çıkarın
  3. Projeyi kapatın ve gradle kök proje Alma

Güncelleme 4

0.1.2 gibi şimdi compile files('libs/android-support-v4.jar') yerine compile "com.android.support:support-v4:13.0.0" ekleyebilirsiniz. Mavin gelen olduğu için artık bir sorun olmadan birden fazla proje bu dahil edebilirsiniz.

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.4.2'
    }
}

apply plugin: 'android'

dependencies {
    compile "com.android.support:support-v4:13.0.0"

    compile project(':SubProjects:MyLib')
}

Güncelleme 5

0.1.3 şimdi "Sync" Araç Çubuğu. Bu düğme bir Proje var gibi .gradle dosyalarında değişiklik yaptıktan sonra projenizi yeniden içe aktarma yerine tıklayabilirsiniz.

CEVAP
23 Mayıs 2013, PERŞEMBE


NotBu cevap saf Gradle bir cevap, düzenli olarak Kişisel olarak ben bunu kullanırım ama entegrasyonu Android Studio ile nasıl bilmiyorum. Bana neler olduğunu bilerek inananlardan biriyim, bu Gradle ve Android kullanıyorum.

TL;DRTam Örnek https://github.com/ethankhall/driving-time-tracker/

Yasal UyarıBu üzerinde çalışıyordu olduğum bir proje.

Gradle çok benziyorsa, hiç kullandıysanız Maven için defined yapısı değiştirebilirsiniz, altındaki bağlantıya sana ne söylediğini).

Project Root
 -- src
|    -- main (your project)
|   |    -- java (where your java code goes)
|   |    -- res  (where your res go)
|   |    -- assets (where your assets go)
|   |   \-- AndroidManifest.xml
|   \-- instrumentTest (test project)
|       \-- java (where your java code goes)
 -- build.gradle
\-- settings.gradle

Eğer tek bir proje ayarları.gradle dosyası gerekli değildir. Ancak ihtiyacımız çok fazla proje eklemek istediğiniz.

Şimdi bu yapı bir göz atmanız.dosya gradle. (Android araçları eklemek için) bu ihtiyacımız olacak

inşa.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.3'
    }
}

Şimdi Android bazı parçalar hakkında Gradle anlatmalıyız. Çok basit. Temel bir tek benim çoğu çalışan () aşağıdaki gibi görünüyor. Bu blokta bir yorum yapmayacağım, beni MUAYENE oluştururken sürüm adı ve kodu için izin verir.

inşa.gradle

apply plugin: "android"
android {
        compileSdkVersion 17
        /*
        defaultConfig {
            versionCode = 1
            versionName = "0.0.0"
        }
        */
    }

Bir şey, henüz Gradle ışığı görmedi kimse yardım eklemek için, onları yüklemeden proje kullanmak için bir yol istiyorum gidiyoruz.

inşa.gradle

task wrapper(type: org.gradle.api.tasks.wrapper.Wrapper) {
    gradleVersion = '1.4'
}

Şimdi inşa etmek için bir proje var. Şimdi diğerlerini de ekleyeceğiz. Ben bir dizine koymak, yönetimi Teslim alma Mal hareketi veya projeler Ara belki. Gerçekten önemli değil, ama nereye koyduğunuzu bilmek gerekir. Projeler nerede Gradle söylemek ayarları eklemek için ihtiyacımız olacak.gradle.

Yapı Dizin:

Project Root
 -- src (see above)
 -- subProjects (where projects are held)
|    -- reallyCoolProject1 (your first included project)
|       \-- See project structure for a normal app
|   \-- reallyCoolProject2 (your second included project)
|       \-- See project structure for a normal app
 -- build.gradle
\-- settings.gradle

ayarlar.gradle:

include ':subProjects:reallyCoolProject1'
include ':subProjects:reallyCoolProject2'

Emin olun gereken en son şeyreallyCoolProject1//alt projeler oluşturmak.gradleapply plugin: "android" yerine apply plugin: "android-library" vardır.

Her Gradle projesi (Maven) gibi biz artık bağımlılık hakkında kök projesi söylemek lazım. Bu da istediğiniz herhangi bir normal Java bağımlılıkları vardır.

inşa.gradle

dependencies{
    compile 'com.fasterxml.jackson.core:jackson-core:2.1.4'
    compile 'com.fasterxml.jackson.core:jackson-databind:2.1.4'
    compile project(":subProjects:reallyCoolProject1")
    compile project(':subProjects:reallyCoolProject2')
}

Bu adımları bir sürü gibi görünüyor biliyorum, ama bir veya iki kez yapmak oldukça kolay. Bu şekilde siz de CI bir server Android SDK yüklü olduğunu varsayarsak oluşturmak için izin verir.

Eğer aşağıdaki gibi bir şey ihtiyacımız olacak, Mall of Sofia kullanmak için gidiyoruz. Mall of Sofia Yan Not: Örnek oluşturmak.gradle dosyası burada bulunabilir: https://gist.github.com/khernyo/4226923

inşa.gradle

task copyNativeLibs(type: Copy) {
    from fileTree(dir: 'libs', include: '**/*.so' )  into  'build/native-libs'
}
tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }

clean.dependsOn 'cleanCopyNativeLibs'

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
  pkgTask.jniDir new File('build/native-libs')
}

Kaynaklar:

  1. http://tools.android.com/tech-docs/new-build-system/user-guide
  2. https://gist.github.com/khernyo/4226923
  3. https://github.com/ethankhall/driving-time-tracker/

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CHISTOSITOJAJA

    CHISTOSITOJA

    27 HAZİRAN 2010
  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • nemoking of kinges

    nemoking of

    4 EYLÜL 2009