最終編集:
これは、いくつかの編集を伴う一種の長い質問であり、途中の各ステップで必ずしも正しいことをしているとは限りませんでした. この質問に出くわし、Android Studio でプロジェクトを gradle に変換する際に問題が発生した場合は、質問 # 16718026で言及されているこのリポジトリをチェックアウトし、それをインポートしてコンパイルして実行することをお勧めします。何かが機能するようになると、自分のプロジェクトの何が問題なのかを簡単に確認できます。
要約すると、Gradle 1.6 と Gradle Plugin .5 を自動インストールした Android Studio .2.5 を使用して、Gradle 以外の Android Studio プロジェクトを動作する Gradle プロジェクトに変換するために私が行ったことは次のとおりです。
(1) アイコンとアクティビティを含む新しい空白の Android Studio プロジェクトを作成しました。注: Android と Gradle を同時に学習していたため、最初はこれに気づきませんでしたが、Android Studio (とにかくこのバージョン) は実際にマルチプロジェクトのセットアップをセットアップするので、混乱しました。マルチプロジェクトとは、階層内のプロジェクトの上に別のフォルダーがあり、すべてのプロジェクトの設定を保存する場所を提供することを意味します。AS はサブプロジェクト フォルダー (私の場合は FrontlineSMS) に build.gradle ファイルを作成しませんでした。そのため、そのサブプロジェクトの build.gradle ファイルを作成し、非常に単純な settings.gradle も作成する必要がありました (以下のUpdate 2を参照してください)。
(2) src/、res/、.git/、lib/、.gitignore、AndroidManifest.xml を新規プロジェクトのルートにコピーしました。
(3)git mv
これらの項目を Gradle プラグイン ユーザー ガイドの規則に従って適切な場所に移動するために使用され、必要に応じて空のプロジェクト内の既存のファイルまたはフォルダーを置換または削除します。
(4)build.gradle
サブプロジェクト フォルダに を作成し、いくつかの基本設定を行いました (以下または上記のリンク先の質問を参照)。
(5) Update 4の説明に従ってプロジェクトをインポートした
元の質問:
私は、現在Gradleを使用していない(そしてコンパイルして正常に実行される)Android Studioプロジェクトを、OS XでGradleを使用するプロジェクトに変換しようとしている初心者のAndroid開発者です。私のプロジェクト構造、IDE の設定、build.gradle ファイルの設定、またはそれらの組み合わせのいずれかに関係している必要があります。
私が行った変換の方法は、最初に Android Studio で新しいプロジェクトを作成し、ファイルを適切な場所にコピーしてから、IDE と build.gradle ファイルにいくつかの設定を追加することでした。私の結果のプロジェクト構造は、
├── frontlinesms-for-android
├── build.gradle
├── gradle
├── gradlew
├── gradle.bat
├── settings.gradle (added in update 2)
├── local.properties
├── lib
└── lib1.jar
└── lib2.jar
└── ...
├── frontlinesms-for-android.iml
├── FrontlineSMS
└── build.gradle
└── src
├── main
│ └── res
│ └── AndroidManifest.xml
│ └── java
│ └── net
│ └── frontlinesms
│ └── android
│ ├── FrontlineSMS.java
│ ├── ...
最も注目すべきは、res/ フォルダーを java/ および AndroidManifest.xml と同じレベルに配置したことです。私は Gradle Plugin User Guide に記載されている規則に従おうとしているので、build.gradle ファイルであまりカスタマイズする必要はありません。
また、フォルダー FrontlineSMS/src/main/java/net をソースとしてマークしました。そうしないと、何もコンパイルしようとしないからです。Gradle Web サイトの説明ビデオでは存在すると言われていましたが、新しいプロジェクトを作成したときには存在しなかったため、FrontlineSMS/build.gradle に新しい build.gradle ファイルを作成しました。
IDE では、/lib にある外部ライブラリの依存関係も設定します。
IDE 経由でコンパイルしようとするとPackage r does not exist
、自動生成された R クラスが生成または認識されていないことを示す多くのエラーが発生します。これは、プロジェクトで次のように定義されています。
import net.frontlinesms.android.R;
いくつかのファイルで。src/main/res で定義したリソースを Android Studio / Gradle に認識させるにはどうすればよいですか?
他の人の質問を読んで、このエラーの解決策には、「gen/」フォルダーをソースルートとしてマークするか、プロジェクトを「クリーニング」することが含まれていることに気付きました。ルート ディレクトリに gen/ フォルダーを作成し、それをソースとしてマークしようとしましたが、うまくいきませんでした。そして、プロジェクトを再構築すると、同じエラーが発生します。
私のルート build.gradle ファイルには次のものがあります。
dependencies {
compile project(':FrontlineSMS')
}
また、FrontlineSMS/build.gradle の下には、
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile file('../lib/acra-3.1.1.jar')
compile file('../lib/activation.jar')
compile file('../lib/additionnal.jar')
compile file('../lib/annotations.jar')
compile file('../lib/libGoogleAnalytics.jar')
compile file('../lib/mail.jar')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
を使用してコマンドラインからビルドしようとすると、./gradlew clean
このエラーが発生します。
(removed error)
前回の質問に加えて、このプロジェクトをどのように構成すべきかについて、アドバイスをいただければ幸いです。これは、マルチプロジェクトのセットアップを意図したものではありません。ご協力いただきありがとうございます。
更新 1
コマンドラインから APK を生成できました。私の主な問題はgradle clean
、間違ったディレクトリから呼び出していたことです。FrontlineSMS から呼び出すとうまくいきました。Android Studio は、プロジェクトが 1 つしかないときにマルチプロジェクト設定をセットアップしたと推測しています。そのためのすべての設定を入力していませんでした。つまり、settings.gradle ファイルを作成していませんでした。
更新 2
次の settings.gradle ファイルを作成しました。これによりgradle clean && gradle build
、ルート ディレクトリ (settings.gradle が存在する場所)から実行できます。
include ':FrontlineSMS'
注: ここで使用している gradle のバージョンは、homebrew によってインストールされた 1.6 です。インストールされたgradlewラッパーを使用すると、
Gradle version 1.6 is required. Current version is 1.7
このエラーを Web で検索すると、この時点で Android が 1.7 をサポートしておらず、1.6 のみをサポートしているように見えます (おそらく、常に 1 つまたは 2 つ遅れたバージョンです)。事業!
更新 3 (編集: これは基本的にすべて間違っています。これに従わないでください)
Android Studio からプロジェクトをビルドしようとすると、1.6 が必要であるという上記と同じエラーが発生します。プロジェクトを再インポートしようとしましたが、ソース ファイルが見つからないと言われました。これは、(1) 間違ったバージョンの gradle を持っているので修正する必要があるか、おそらく (2) build.gradle ファイルでソース ファイルを定義する必要があるかのいずれかを意味していると思います。ガイドからの規則。
コピーgradle-wrapper-1.6.jar
して置き換えようとしましgradle/wrapper/gradle-wrapper.jar
たが、を介して実行したときにクラスまたはメソッドが見つからないというエラーが発生しました./gradlew clean
。
試行された解決策:gradle/wrapper/gradle-wrapper.properties
行があり、distributionUrl=
これを 1.6 バージョンを指すように変更しました。
distributionUrl=http\://services.gradle.org/distributions/gradle-1.6-bin.zip
次に実行./gradlew clean
すると、新しいバージョンの gradle がホーム ディレクトリにダウンロードされ~/.gradle
(これまで存在して./gradlew --version
いることに気づきませんでした)、入力すると 1.6 であると表示され、コマンド ラインを使用してすべてがビルドされます。./gradlew clean && ./gradlew build
、apk になります。コマンドラインからでも動作するようですが、IDEからも動作させたいです
IDEでは、それは今言っています
Project is using an old version of the Android Gradle plug-in. The minimum supported version is 0.5.0
build.gradle
だから私は言うためにファイルを更新します
classpath 'com.android.tools.build:gradle:0.5'
IDE を再度開くと、次のように表示されます。
Could not find com.android.tools.build:gradle:0.5.
Android Studio gradle プラグインと gradle バージョンは関連付けられていますか? もしそうなら、何が欲しいですか、gradle plugin .4 + gradle 1.6 または gradle plugin .5 と gradle 1.7? また、これらを正しくインストールするにはどうすればよいですか?
更新 4
私はついにこれをコマンドラインとIDEの両方でコンパイルしました。トリックは、基本的な Gradle ファイルを作成した後で、Gradle を使用してプロジェクトをインポートすることでした。ありがとうイーサン!プロジェクトのインポート プロセス中に、「既存のソースからプロジェクトを作成する」または「外部モデルからプロジェクトをインポートする」を選択するステップがあります。後者を選択して Gradle を選択するべきだったときに、前者を選択していました。その後、「use gradle-wrapper (recommended)」を選択し、「use auto-import」をチェックして「Finish」をクリックしました。build.gradle
ファイルにこの変更を加えた最新のgradleプラグインを使用するなど、変更する必要があるいくつかのことについて警告されました。
classpath 'com.android.tools.build:gradle:0.5.+'
これは、android gradle プラグインの既知の問題で提案されています。