Android StudioとGradleを使用してAndroidライブラリを構築するにはどうすればよいですか?


144

私はEclipseからプロジェクトを移行しようとしていますが、私が試したことは何も機能していません。Eclipseには3つのプロジェクトがあります(2つのAndroidアプリプロジェクトと1つのAndroidライブラリプロジェクト)。2つのアプリプロジェクトは、ライブラリプロジェクトに依存しています。Gradleエクスポートを実行すると、機能しない3つのプロジェクトが表示されます。私はプロジェクトを再構築することにオープンですが、これがどのように行われるべきかについてのドキュメントを見つけていません。

Eclipseがエクスポートする3つのプロジェクトを連携させる方法はありますか?私は物事を再構築した方がいいですか?そうであれば、これをどのようにすべきかについてのドキュメントがありますか?

更新

プロジェクト全体をGitHubにアップロードしましたhttps://github.com/respectTheCode/android-studio-library-example

アップデート1

Padma Kumarからの提案に基づいて、これは私が試したものです。

  1. という新しいプロジェクトを作成します MyApp
  2. をクリックしFile > New Module、選択Android Libraryして名前を付けますMyLib
  3. クリック Build > Make Project

ビルドはこのエラーで失敗します

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.

次に、package属性をマニフェストに追加してそれを作成しました

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

ビルド後、このエラーが発生します

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

依存関係を追加しても、エラーには影響がないようです。上から続く

  1. クリック File > Project Structure > Modules > MyApp-MyApp
  2. Dependenciesタブに切り替え
  3. クリックし+ > Module DependencyてピックMyLib
  4. クリックしApplyOK
  5. クリック Build > Make Project

アップデート2

イーサンからの提案に基づくこれは私たちが得る場所です

2サブプロジェクトbuild.gradleには正しい部分がすべて含まれているようです。唯一の違いは、プラグインの線の下がであること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
    }
}

ルートプロジェクトbuild.gradleが空だったので、次のように2つのプロジェクトを追加しました

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

ビルド時にこのエラーが発生します

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.

アップデート3

これを解決してくれたイーサンに感謝します。

  1. 追加compile project(':SubProjects:MyLib')しますMyLib/build.gradle
  2. compile files('libs/android-support-v4.jar')から削除MyLib/build.gradle
  3. プロジェクトを閉じて、gradleからルートプロジェクトをインポートする

アップデート4

0.1.2以降では、compile "com.android.support:support-v4:13.0.0"ではなくを含めることができるようになりましたcompile files('libs/android-support-v4.jar')。mavinから提供されているため、複数のプロジェクトに問題なく組み込むことができます。

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')
}

アップデート5

0.1.3以降、ツールバーに「プロジェクトの同期」ボタンがあります。.gradleファイルに変更を加えた後、プロジェクトを再インポートする代わりに、それをクリックできます。


私はあなたのgithubプロジェクトにプルリクエストをしました。2つの単純な変更がありました。/build.gradleからコンテンツを削除します。{これは、プロジェクトの種類を定義しなかったために行ったものであり、それをどうするかわからないという不満がありました}次に、:SubProject:MyLibから:SubProject:MyAppへの依存関係を追加しました。次に./gradlew:SubProject:MyApp:iDを実行しました(iDはinstallDebugにマップされます)。重複したlibs / android-support-v4.jarも削除する必要がありました。これは「実際の」依存関係ではないため、2つの場所に置くことはできません。
2013年

プルリクエストについてコメントしました。github.com/respectTheCode/android-studio-library-example/pull/1
respectTheCode

1
compile 'com.google.android:support-v4:r6'Gradleの代わりに各プロジェクトとMavenプラグイン(以下のbuild.gradleの例のように)に追加すると、compile files('libs/android-support-v4.jar')両方のプロジェクトに同じものが含まれ、一度しか含まれないことに気付くでしょう。
イーサン

@respectTheCodeプルリクエストを送信して、サンプルgithubプロジェクトを少しクリーンアップしました。共有してくれてありがとう!
JohnnyLambada 14

回答:


115

:この回答は純粋なGradleの回答です。IntelliJでこれを定期的に使用していますが、Android Studioとの統合がどのように行われるかわかりません。私は自分に何が起こっているのかを知っていると信じています。そのため、私はGradleとAndroidを使用しています。

TL; DR完全な例-https://github.com/ethankhall/driving-time-tracker/

免責事項:これは私が取り組んでいるプロジェクトでした。

Gradleには、これまでに使用したことがある場合のMavenと非常によく似た定義済みの構造があります(変更可能で、下部のリンクで方法がわかります)。

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

プロジェクトが1つしかない場合、settings.gradleファイルは必要ありません。ただし、プロジェクトを追加したいので、それが必要です。

それでは、build.gradleファイルをのぞいてみましょう。あなたはそれにこれを必要とするでしょう(アンドロイドツールを追加するために)

build.gradle

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

次に、AndroidパーツのいくつかについてGradleに通知する必要があります。とても簡単です。(私の場合のほとんどで機能する)基本的なものは次のようになります。このブロックにコメントがあります。APKを生成するときにバージョン名とコードを指定できます。

build.gradle

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

Gradleの光を見たことがない人を助けるために、プロジェクトをインストールせずにプロジェクトを使用する方法を追加します。

build.gradle

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

これで、ビルドするプロジェクトが1つあります。次に、その他を追加します。私はそれらをディレクトリに配置し、おそらくそれをdepsまたはsubProjectsと呼びます。それは本当に重要ではありませんが、どこに置くかを知る必要があります。Gradleにプロジェクトの場所を通知するには、それらをsettings.gradleに追加する必要があります。

ディレクトリ構造:

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

settings.gradle:

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

最後に確認する必要があるのは、subProjects / reallyCoolProject1 / build.gradleがのapply plugin: "android-library"代わりに持っていることですapply plugin: "android"

すべてのGradleプロジェクト(およびMaven)と同様に、依存関係についてルートプロジェクトに通知する必要があります。これには、必要な通常のJava依存関係も含めることができます。

build.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')
}

これは多くのステップのように思えますが、1回または2回実行すれば、とても簡単です。この方法では、Android SDKがインストールされていることを前提として、CIサーバー上に構築することもできます。

NDKサイド注:NDKを使用する場合は、以下のようなものが必要になります。build.gradleファイルの例は、https://gist.github.com/khernyo/4226923にあります

build.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')
}

出典:

  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/

1
@Ethanに感謝します。これはいくつかの空白を埋めます。Android Studioには、ルートプロジェクトbuild.gradleしかありませんでした。私は今得ているエラーで質問を更新します。
RespectTheCode

1
運転時間トラッカーリポジトリのクローンを作成してプロジェクトをインポートしようとしましたが、コンパイルできません。
RespectTheCode 2013年

私は何かを忘れて、私は新しい要求をしました
イーサン

1
こんにちは@Ethanは、あなたにも私の問題を支援する気になり、あなたはGradleの経験があるようです:stackoverflow.com/questions/17479076/...
TacB0sS

@Ethan Android向けGradleの依存関係の問題についてお手伝いできますか?
JJD 2013年

6

私はgradleビルド/ .jarライブラリの追加に関して非常に似た問題を抱えていました。私はそれを組み合わせて動作させました:

  1. libsフォルダーをプロジェクトのルート(「src」と同じディレクトリ)まで移動し、ファインダー内のこのフォルダーにライブラリを追加する(Mac OS Xを使用)
  2. Android Studioで、ライブラリーとして追加するフォルダーを右クリック
  3. build.gradleファイルの依存関係の編集、追加 compile fileTree(dir: 'libs', include: '*.jar')}

しかし、もっと重要で面倒なことに、私が機能してから数時間後に、Android Studioは0.3.7をリリースしました。

http://tools.android.com/recent

これが人々の役に立つことを願っています!


1
この問題は、Java .jarライブラリではなくAndriod Librariesについて話しています。
RespectTheCode

2
ほんとだ!しかし、私の問題はgradle buildsとandroid studioに関係しており、この投稿は私の解決に導くのに役立つほど十分に似ていました-他の誰かがこの質問に導かれ、同じ立場にあった場合に備えて、良いニュースを広めたいと思っただけです私。
Joel Balmer、

1

Macユーザーのための私の解決策は次のとおりです。ウィンドウでも機能すると思います。

まずAndroid Studioツールバーに移動します

ビルド>プロジェクトの作成(オンラインでファイルをダウンロードできるようにします)、次に

ビルド>コンパイルモジュール "ここにアプリ名が表示されます"(まだオンラインのままで、ファイルを
ダウンロードして終了します)

実行したアプリを実行すると、エミュレータが起動して構成され、実行されます。

それだ!!!ハッピーコーディングみんな!!!!!!


0

Gradle Build Tools 2.2.0+-すべてが機能する

これが正しい方法です

NDKとそのすべてのハッカーに実験的で率直にうんざりしないようにするために、Gradle Build Toolsの2.2.xが出て、今はそれが機能することを嬉しく思います。キーがありexternalNativeBuild、ポインティングndkBuildでpath引数をAndroid.mkまたは変更ndkBuildするcmakeとのpath引数を指すCMakeLists.txtビルドスクリプト。

android {
    compileSdkVersion 19
    buildToolsVersion "25.0.2"

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 19

        ndk {
            abiFilters 'armeabi', 'armeabi-v7a', 'x86'
        }

        externalNativeBuild {
            cmake {
                cppFlags '-std=c++11'
                arguments '-DANDROID_TOOLCHAIN=clang',
                        '-DANDROID_PLATFORM=android-19',
                        '-DANDROID_STL=gnustl_static',
                        '-DANDROID_ARM_NEON=TRUE',
                        '-DANDROID_CPP_FEATURES=exceptions rtti'
            }
        }
    }

    externalNativeBuild {
        cmake {
             path 'src/main/jni/CMakeLists.txt'
        }
        //ndkBuild {
        //   path 'src/main/jni/Android.mk'
        //}
    }
}

詳細については、ネイティブコードの追加に関するGoogleのページをご覧ください

これが正しくセットアップされたら、次のことができます ./gradlew installDebugあなたが行く、あなたが行くます。Android NDKではgccが非推奨になっているため、NDKがclangに移行することにも注意する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.