Eclipse からプロジェクトを移行しようとしていますが、試したことは何も機能していません。Eclipse には 3 つのプロジェクト (2 つの Android アプリ プロジェクトと 1 つの Android ライブラリ プロジェクト) があります。2 つのアプリ プロジェクトはライブラリ プロジェクトに依存しています。Gradle エクスポートを実行すると、機能しない 3 つのプロジェクトが生成されます。プロジェクトを再構築することは可能ですが、その方法に関するドキュメントが見つかりません。
Eclipse がエクスポートする 3 つのプロジェクトを連携させる方法はありますか? 再構築したほうがよいでしょうか。そうであれば、その方法を説明したドキュメントはありますか?
アップデート
プロジェクト全体をGitHubにアップロードしましたhttps://github.com/respectTheCode/android-studio-library-example
アップデート1
Padma Kumar からの提案に基づいて、これを試してみました。
- 新しいプロジェクトを作成します
MyApp
- クリックして
File > New Module
選択しAndroid Library
、名前を付けますMyLib
- クリック
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
依存関係を追加してもエラーには影響がないようです。上記から続けます
- クリック
File > Project Structure > Modules > MyApp-MyApp
Dependencies
タブに切り替える- クリック
+ > Module Dependency
して選択MyLib
- クリック
Apply
してOK
- クリック
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
これを解決してくれたEthanに大感謝。
- 追加
compile project(':SubProjects:MyLib')
するMyLib/build.gradle
compile files('libs/android-support-v4.jar')
から削除MyLib/build.gradle
- プロジェクトを閉じて、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
ファイルに変更を加えた後、プロジェクトを再インポートする代わりに、このボタンをクリックできます。
ベストアンサー1
注記: この回答は純粋な Gradle の回答です。私はこれを IntelliJ で定期的に使用していますが、Android Studio との統合がどのようになっているかはわかりません。私は自分の状況を把握することを信条としているので、これが私が Gradle と Android を使用する方法です。
要約完全な例 -https://github.com/ethankhall/driving-time-tracker/
免責事項: これは私が取り組んでいる/取り組んでいたプロジェクトです。
Gradleには定義された構造 (変更可能、下部のリンクに方法が説明されています) は、Maven を使用したことがある人なら、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ファイルを見てみましょう。このファイルには、Androidツールを追加するためにこれが必要です。
ビルド
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.3'
}
}
ここで、Android の一部の部分を Gradle に伝える必要があります。これは非常に簡単です。基本的なもの (ほとんどの場合に機能します) は次のようになります。このブロックにはコメントがあり、APK を生成するときにバージョン名とコードを指定できます。
ビルド
apply plugin: "android"
android {
compileSdkVersion 17
/*
defaultConfig {
versionCode = 1
versionName = "0.0.0"
}
*/
}
まだ 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
設定.gradle:
include ':subProjects:reallyCoolProject1'
include ':subProjects:reallyCoolProject2'
最後に確認しておきたいのはサブプロジェクト/reallyCoolProject1/build.gradleapply plugin: "android-library"
の代わりにがありますapply plugin: "android"
。
すべての Gradle プロジェクト (および Maven) と同様に、ルート プロジェクトに依存関係を伝える必要があります。これには、必要な通常の Java 依存関係も含めることができます。
ビルド
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
ビルド
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')
}
出典: