mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-27 00:38:11 -07:00
Fix manifest merger.
This commit is contained in:
parent
e1c7aa6a43
commit
42f756dc92
5 changed files with 65 additions and 21 deletions
|
@ -26,13 +26,13 @@ class Variant(val initialProductFlavor: ProductFlavorConfig? = null,
|
||||||
fun toTask(taskName: String) = taskName + productFlavor.name.capitalize() + buildType.name.capitalize()
|
fun toTask(taskName: String) = taskName + productFlavor.name.capitalize() + buildType.name.capitalize()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* for {internal, release}, return [internal, release, internalRelease]
|
* for {internal, release}, return [internalRelease, internal, release]
|
||||||
*/
|
*/
|
||||||
fun allDirectories(project: Project): List<String> {
|
fun allDirectories(project: Project): List<String> {
|
||||||
val result = arrayListOf<String>()
|
val result = arrayListOf<String>()
|
||||||
|
result.add(toCamelcaseDir())
|
||||||
if (productFlavor != null) result.add(productFlavor.name)
|
if (productFlavor != null) result.add(productFlavor.name)
|
||||||
if (buildType != null) result.add(buildType.name)
|
if (buildType != null) result.add(buildType.name)
|
||||||
result.add(toCamelcaseDir())
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,9 @@ import com.android.sdklib.AndroidTargetHash
|
||||||
import com.android.sdklib.SdkManager
|
import com.android.sdklib.SdkManager
|
||||||
import com.android.utils.StdLogger
|
import com.android.utils.StdLogger
|
||||||
import com.beust.kobalt.Variant
|
import com.beust.kobalt.Variant
|
||||||
|
import com.beust.kobalt.api.IClasspathDependency
|
||||||
import com.beust.kobalt.api.Project
|
import com.beust.kobalt.api.Project
|
||||||
|
import com.beust.kobalt.maven.dependency.MavenDependency
|
||||||
import com.beust.kobalt.misc.KFiles
|
import com.beust.kobalt.misc.KFiles
|
||||||
import com.beust.kobalt.misc.log
|
import com.beust.kobalt.misc.log
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
@ -70,6 +72,8 @@ class AndroidBuild {
|
||||||
// val annotationsJar = File("/Users/beust/adt-bundle-mac-x86_64-20140702/sdk/tools/lib/annotations.jar")
|
// val annotationsJar = File("/Users/beust/adt-bundle-mac-x86_64-20140702/sdk/tools/lib/annotations.jar")
|
||||||
// val adb = File("/Users/beust/adt-bundle-mac-x86_64-20140702/sdk/platform-tools/adb")
|
// val adb = File("/Users/beust/adt-bundle-mac-x86_64-20140702/sdk/platform-tools/adb")
|
||||||
|
|
||||||
|
lateinit var androidBuilder: AndroidBuilder
|
||||||
|
|
||||||
fun run(project: Project, variant: Variant, config: AndroidConfig, aarDependencies: List<File>,
|
fun run(project: Project, variant: Variant, config: AndroidConfig, aarDependencies: List<File>,
|
||||||
rDirectory: String) {
|
rDirectory: String) {
|
||||||
val logger = StdLogger(StdLogger.Level.VERBOSE)
|
val logger = StdLogger(StdLogger.Level.VERBOSE)
|
||||||
|
@ -77,7 +81,7 @@ class AndroidBuild {
|
||||||
val javaProcessExecutor = KobaltJavaProcessExecutor()
|
val javaProcessExecutor = KobaltJavaProcessExecutor()
|
||||||
val androidHome = File(AndroidFiles.androidHome(project, config))
|
val androidHome = File(AndroidFiles.androidHome(project, config))
|
||||||
val sdkLoader : SdkLoader = DefaultSdkLoader.getLoader(androidHome)
|
val sdkLoader : SdkLoader = DefaultSdkLoader.getLoader(androidHome)
|
||||||
val androidBuilder = AndroidBuilder(project.name, "kobalt-android-plugin",
|
androidBuilder = AndroidBuilder(project.name, "kobalt-android-plugin",
|
||||||
processExecutor,
|
processExecutor,
|
||||||
javaProcessExecutor,
|
javaProcessExecutor,
|
||||||
KobaltErrorReporter(),
|
KobaltErrorReporter(),
|
||||||
|
@ -121,7 +125,7 @@ class AndroidBuild {
|
||||||
}.filter {
|
}.filter {
|
||||||
it.exists()
|
it.exists()
|
||||||
}
|
}
|
||||||
val libraries = listOf<ManifestDependency>()
|
val libraries = createLibraryDependencies(project, project.compileDependencies)
|
||||||
val outManifest = AndroidFiles.mergedManifest(project, variant)
|
val outManifest = AndroidFiles.mergedManifest(project, variant)
|
||||||
val outAaptSafeManifestLocation = KFiles.joinDir(project.directory, project.buildDirectory, "generatedSafeAapt")
|
val outAaptSafeManifestLocation = KFiles.joinDir(project.directory, project.buildDirectory, "generatedSafeAapt")
|
||||||
val reportFile = File(KFiles.joinDir(project.directory, project.buildDirectory, "manifest-merger-report.txt"))
|
val reportFile = File(KFiles.joinDir(project.directory, project.buildDirectory, "manifest-merger-report.txt"))
|
||||||
|
@ -210,4 +214,32 @@ class AndroidBuild {
|
||||||
|
|
||||||
androidBuilder.processResources(aaptCommand, true, processOutputHandler)
|
androidBuilder.processResources(aaptCommand, true, processOutputHandler)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun createLibraryDependencies(project: Project, dependencies: List<IClasspathDependency>)
|
||||||
|
: List<ManifestDependency> {
|
||||||
|
val result = arrayListOf<ManifestDependency>()
|
||||||
|
dependencies.filter {
|
||||||
|
it is MavenDependency && it.jarFile.get().path.endsWith(".aar")
|
||||||
|
}.forEach {
|
||||||
|
val dep = it as MavenDependency
|
||||||
|
result.add(object: ManifestDependency {
|
||||||
|
override fun getManifest(): File? {
|
||||||
|
return File(AndroidFiles.explodedManifest(project, dep.mavenId))
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getName() = it.jarFile.get().path
|
||||||
|
|
||||||
|
override fun getManifestDependencies(): List<ManifestDependency> {
|
||||||
|
return createLibraryDependencies(project, it.directDependencies())
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
it.directDependencies()
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
fun dex(project: Project) {
|
||||||
|
// androidBuilder.createMainDexList()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@ import com.beust.kobalt.api.KobaltContext
|
||||||
import com.beust.kobalt.api.Project
|
import com.beust.kobalt.api.Project
|
||||||
import com.beust.kobalt.maven.MavenId
|
import com.beust.kobalt.maven.MavenId
|
||||||
import com.beust.kobalt.misc.KFiles
|
import com.beust.kobalt.misc.KFiles
|
||||||
import java.nio.file.Paths
|
|
||||||
|
|
||||||
class AndroidFiles {
|
class AndroidFiles {
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -26,9 +25,14 @@ class AndroidFiles {
|
||||||
fun mergedResources(project: Project, variant: Variant) =
|
fun mergedResources(project: Project, variant: Variant) =
|
||||||
KFiles.joinAndMakeDir(mergedResourcesNoVariant(project), variant.toIntermediateDir())
|
KFiles.joinAndMakeDir(mergedResourcesNoVariant(project), variant.toIntermediateDir())
|
||||||
|
|
||||||
|
private fun exploded(project: Project, mavenId: MavenId) = KFiles.joinAndMakeDir(
|
||||||
|
intermediates(project), "exploded-aar", mavenId.groupId, mavenId.artifactId, mavenId.version!!)
|
||||||
|
|
||||||
|
fun explodedManifest(project: Project, mavenId: MavenId) =
|
||||||
|
KFiles.joinDir(exploded(project, mavenId), "AndroidManifest.xml")
|
||||||
|
|
||||||
fun classesJar(project: Project, mavenId: MavenId) =
|
fun classesJar(project: Project, mavenId: MavenId) =
|
||||||
Paths.get(intermediates(project), "exploded-aar", mavenId.groupId, mavenId.artifactId, mavenId.version,
|
KFiles.joinDir(exploded(project, mavenId), "classes.jar")
|
||||||
"classes.jar").toFile().path
|
|
||||||
|
|
||||||
fun classesDir(project: Project, variant: Variant): String =
|
fun classesDir(project: Project, variant: Variant): String =
|
||||||
KFiles.joinDir(project.directory, project.buildDirectory, variant.toIntermediateDir(), "classes")
|
KFiles.joinDir(project.directory, project.buildDirectory, variant.toIntermediateDir(), "classes")
|
||||||
|
|
|
@ -406,8 +406,8 @@ public class AndroidPlugin @Inject constructor(val javaCompiler: JavaCompiler, v
|
||||||
override fun fieldsFor(project: Project, context: KobaltContext): List<BuildConfigField> {
|
override fun fieldsFor(project: Project, context: KobaltContext): List<BuildConfigField> {
|
||||||
val result = arrayListOf<BuildConfigField>()
|
val result = arrayListOf<BuildConfigField>()
|
||||||
configurationFor(project)?.let { config ->
|
configurationFor(project)?.let { config ->
|
||||||
result.add(BuildConfigField("String", "VERSION_NAME", "\"${config.versionName}\""))
|
result.add(BuildConfigField("String", "VERSION_NAME", "\"${config.defaultConfig.versionName}\""))
|
||||||
result.add(BuildConfigField("int", "VERSION_CODE", "${config.versionCode}"))
|
result.add(BuildConfigField("int", "VERSION_CODE", "${config.defaultConfig.versionCode}"))
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
@ -416,13 +416,16 @@ public class AndroidPlugin @Inject constructor(val javaCompiler: JavaCompiler, v
|
||||||
override fun tasksFor(context: KobaltContext): List<DynamicTask> = taskContributor.dynamicTasks
|
override fun tasksFor(context: KobaltContext): List<DynamicTask> = taskContributor.dynamicTasks
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class DefaultConfig(var minSdkVersion: String? = null,
|
||||||
|
var targetSdkVersion: String? = null,
|
||||||
|
var versionCode: Int? = null,
|
||||||
|
var versionName: String? = null) {
|
||||||
|
var buildConfig : BuildConfig? = BuildConfig()
|
||||||
|
}
|
||||||
|
|
||||||
class AndroidConfig(val project: Project,
|
class AndroidConfig(val project: Project,
|
||||||
var compileSdkVersion : String? = null,
|
var compileSdkVersion : String? = null,
|
||||||
var buildToolsVersion: String? = null,
|
var buildToolsVersion: String? = null,
|
||||||
var minSdkVersion: String? = null,
|
|
||||||
var versionCode: Int? = null,
|
|
||||||
var versionName: String? = null,
|
|
||||||
var targetSdkVersion: String? = null,
|
|
||||||
var applicationId: String? = null,
|
var applicationId: String? = null,
|
||||||
val androidHome: String? = null) {
|
val androidHome: String? = null) {
|
||||||
|
|
||||||
|
@ -431,6 +434,12 @@ class AndroidConfig(val project: Project,
|
||||||
fun addSigningConfig(name: String, project: Project, signingConfig: SigningConfig) {
|
fun addSigningConfig(name: String, project: Project, signingConfig: SigningConfig) {
|
||||||
signingConfigs.put(name, signingConfig)
|
signingConfigs.put(name, signingConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var defaultConfig: DefaultConfig = DefaultConfig()
|
||||||
|
|
||||||
|
fun defaultConfig(init: DefaultConfig.() -> Unit) {
|
||||||
|
defaultConfig = DefaultConfig().apply { init() }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Directive
|
@Directive
|
||||||
|
|
|
@ -5,23 +5,22 @@ import com.android.xml.AndroidManifest
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manage the main application id for the app, based on an overlay of the AndroidManifest.xml and
|
* Manage the main application id for the app: values from androidConfig{} have precedence over values
|
||||||
* values specified in the Android config (in the build file).
|
* found in the manifest.
|
||||||
*/
|
*/
|
||||||
class AppInfo(val androidManifest: File, val config: AndroidConfig) {
|
class AppInfo(val androidManifest: File, val config: AndroidConfig) {
|
||||||
val abstractManifest = FileWrapper(androidManifest)
|
val abstractManifest = FileWrapper(androidManifest)
|
||||||
|
|
||||||
private fun <T> overlay(manifestValue: T, configValue: T?) = configValue ?: manifestValue
|
|
||||||
|
|
||||||
val versionCode : Int
|
val versionCode : Int
|
||||||
get() = overlay(AndroidManifest.getVersionCode(abstractManifest), config.versionCode)
|
get() = config.defaultConfig.versionCode ?: AndroidManifest.getVersionCode(abstractManifest)
|
||||||
|
|
||||||
val versionName : String
|
val versionName : String
|
||||||
get() = versionCode.toString()
|
get() = config.defaultConfig.versionName ?: versionCode.toString()
|
||||||
|
|
||||||
val minSdkVersion: String?
|
val minSdkVersion: String?
|
||||||
get() = overlay(AndroidManifest.getMinSdkVersion(abstractManifest), config.minSdkVersion)?.toString()
|
get() = config.defaultConfig.minSdkVersion ?: AndroidManifest.getMinSdkVersion(abstractManifest)?.toString()
|
||||||
|
|
||||||
val targetSdkVersion: String?
|
val targetSdkVersion: String?
|
||||||
get() = overlay(AndroidManifest.getTargetSdkVersion(abstractManifest), config.targetSdkVersion)?.toString()
|
get() = config.defaultConfig.targetSdkVersion
|
||||||
|
?: AndroidManifest.getTargetSdkVersion(abstractManifest)?.toString()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue