設定sdk.dir
しndk.dir
ましたlocal.properties
。
ファイル内sdk.dir
およびファイルndk.dir
内で定義されている値を読み取るにはどうすればよいbuild.gradle
ですか?
設定sdk.dir
しndk.dir
ましたlocal.properties
。
ファイル内sdk.dir
およびファイルndk.dir
内で定義されている値を読み取るにはどうすればよいbuild.gradle
ですか?
local.properties
Android Studio自体のローカル構成で使用されているためか、同じ名前の別のファイルがあると、少し混乱する可能性があります。参照してくださいstackoverflow.com/a/49306091/1587329以下
android.getSdkDirectory()
単に機能します。
回答:
あなたはこの方法でそれを行うことができます:
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def sdkDir = properties.getProperty('sdk.dir')
def ndkDir = properties.getProperty('ndk.dir')
project.rootProject
サブプロジェクトでプロパティファイルを読み取る場合に使用しますbuild.gradle
。
.
├── app
│ ├── build.gradle <-- You are reading the local.properties in this gradle build file
│ └── src
├── build.gradle
├── gradle
├── gradlew
├── gradlew.bat
├── settings.gradle
└── local.properties
プロパティファイルが同じサブプロジェクトディレクトリにある場合は、を使用できますproject
。
build.gradle
ファイル内にはproject
、現在のプロジェクトを参照する変数があります。奇妙なエラーがある場合は、新しい質問をしてください。
local.properties
default.account.iccid=123
build.gradle-
def Properties properties = new Properties()
properties.load(project.rootProject.file("local.properties").newDataInputStream())
defaultConfig {
resValue "string", "default_account_iccid", properties.getProperty("default.account.iccid", "")
}
コードでは、リソースから他の文字列として取得します-
resources.getString(R.string.default_account_iccid);
@rciovatiの答えは確かに正しいですが、sdk.dir
との値を読み取る別の方法もありndk.dir
ます。
で指摘したよう岳上田ことで、このブログのエントリ(NDKディレクトリを取得する)BasePlugin
ためのクラスが提供するメソッドgetNdkFolder()
とgetSdkFolder()
:
def ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
def sdkDir = project.plugins.findPlugin('com.android.application').getSdkFolder()
注:ライブラリを構築している場合は、に変更com.android.application
するcom.android.library
必要がある場合があります
これは、フォルダ値を読み取るためのより洗練された方法かもしれません。@rciovatiによって提供される回答は、プロパティファイル内の任意の値を読み取ることができるため、より柔軟であると言わなければなりません。
plugins.getPlugin('com.android.library').sdkHandler.getNdkFolder()
があります:stackoverflow.com/questions/28615439/…–
上記のlocal.propertiesを手動でロードする答えは明らかに機能し、どのプラグインが適用されたかを知る必要がある次の答えも同様に機能するはずです。
これらのアプローチは、アプリケーション、テスト、またはライブラリプラグインのいずれを使用しているかに関係なく機能するため、より一般的であるため、一部の人にとっては少し良いかもしれません。これらのスニペットは、すべてのAndroidプラグイン構成(製品フレーバー、ビルドツールバージョンなど)への完全なプログラムアクセスも提供します。
Android Gradleプラグインを使用しているbuild.gradleファイルにアクセスする必要がある場合は、Android DSLに直接アクセスするだけで、直接利用できるようになります。
project.android.sdkDirectory
これの長い形式(以下)は、カスタムGradle Tasksクラスまたはプラグインを作成している場合、または単に使用可能なプロパティを表示したい場合に便利です。
// def is preferred to prevent having to add a build dependency.
def androidPluginExtension = project.getExtensions().getByName("android");
// List available properties.
androidPluginExtension.properties.each { Object key, Object value ->
logger.info("Extension prop: ${key} ${value}")
}
String sdkDir = androidPluginExtension.getProperties().get("sdkDirectory");
System.out.println("Using sdk dir: ${sdkDir}");
この投稿の時点で、adbExe
間違いなく注目に値する便利なプロパティもあります。
このコードは、AndroidGradleプラグインがGradleライブサイクルごとに構成された後に実行する必要があります。通常、これは、のexecute
メソッドに配置するTask
かandroid
、Androidアプリ/ライブラリのbuild.gradle
ファイルのDSL宣言の後に配置することを意味します。
これらのスニペットには、Android Gradleプラグインのバージョンをアップグレードすると、プラグインの開発時にこれらのプロパティが変更される可能性があるという警告もあります。そのため、GradleとAndroid Gradleプラグインのバージョン間、およびAndroid Studio(Androidの新しいバージョンの場合もあります)間を移動するときにテストするだけです。 Studioには新しいバージョンのAndroidGradleプラグインが必要です)。
設定
sdk.dir
しndk.dir
ましたlocal.properties
。
Android Studio(ルートプロジェクト用)ですでに使用されlocal.properties
ている値を手動で設定するかどうかを再検討する場合があります。
あなたはこのファイルを手動で変更すべきではありませんか、あなたのバージョン管理システムにそれを確認してください。
ただし、コメントに記載されているcmakeに関する特定の免除を参照してください。
android.getSdkDirectory()
local.properties
も合法です。developer.android.com/studio/projects/を参照してください…:cmake.dir="path-to-cmake"
デフォルトのルックアップ動作をオーバーライドするために追加することをお勧めします。
cmake.dir
するという文書化された目的であり、危険なことを行うことによる警告や副作用ではありません。正当な理由がある場合(つまり、GradleがPATHを使用してCMakeを検索することを望まない場合)にそれを使用することを推奨するのは私ではなく、Googleです。