内部ContentProviderを使用するSDKに取り組んでいます。このSDKをいくつかのプロジェクトで使用し、ライブラリマニフェストで宣言したいので、これを試しました。
<provider
Android:name=".core.MyContentProvider"
Android:authorities="${applicationId}"
Android:exported="false"/>
$ {applicationId}は、ライブラリのpackageNameに置き換えられ、apk関連の最上位のapplicationIdではありません...
launching applicationIdがAndroid:authorities値に配置されることを確認する方法はありますか?
いくつかの異なるバリアントと一意のIDで同じ問題が発生し、Gradleがアプリを構築しているときにプレースホルダーキーを置き換えることになりました。
Gradle 3 +
Android.applicationVariants.all { variant ->
variant.outputs.each { output ->
output.processManifest.doLast {
File manifestFile = file("$manifestOutputDirectory/AndroidManifest.xml")
replaceInFile(manifestFile, 'P_AUTHORITY', variant.applicationId)
}
}
}
def replaceInFile(file, fromString, toString) {
def updatedContent = file.getText('UTF-8')
.replaceAll(fromString, toString)
file.write(updatedContent, 'UTF-8')
}
Gradle <
Android.applicationVariants.all { variant ->
variant.outputs.each { output ->
output.processManifest.doLast{
replaceInManifest(output, 'P_AUTHORITY', variant.applicationId)
}
}
}
def replaceInManifest(output, fromString, toString) {
def manifestOutFile = output.processManifest.manifestOutputFile
def updatedContent = manifestOutFile.getText('UTF-8').replaceAll(fromString, toString)
manifestOutFile.write(updatedContent, 'UTF-8')
}
そしてマニフェストで:
<provider
Android:name=".core.MyContentProvider"
Android:authorities="P_AUTHORITY"
Android:exported="false"/>
それはかなり何度も重宝しています
マニフェストファイルの下で$ {applicationId}を使用できます。そのライブラリのgradleファイルに「applicationId」がないことを確認してください。 「defaultConfig」の下のgradleファイルで宣言した場合は、削除してください。
//So your gradle file of library(SDK) module looks like..
defaultConfig {
minSdkVersion Version.minSdk
targetSdkVersion Version.targetSdk
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
//And your application gradle file looks like..
defaultConfig {
applicationId "com.example.Android"
minSdkVersion Version.minSdk
targetSdkVersion Version.targetSdk
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}