mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-26 08:27:12 -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()
|
||||
|
||||
/**
|
||||
* for {internal, release}, return [internal, release, internalRelease]
|
||||
* for {internal, release}, return [internalRelease, internal, release]
|
||||
*/
|
||||
fun allDirectories(project: Project): List<String> {
|
||||
val result = arrayListOf<String>()
|
||||
result.add(toCamelcaseDir())
|
||||
if (productFlavor != null) result.add(productFlavor.name)
|
||||
if (buildType != null) result.add(buildType.name)
|
||||
result.add(toCamelcaseDir())
|
||||
return result
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,9 @@ import com.android.sdklib.AndroidTargetHash
|
|||
import com.android.sdklib.SdkManager
|
||||
import com.android.utils.StdLogger
|
||||
import com.beust.kobalt.Variant
|
||||
import com.beust.kobalt.api.IClasspathDependency
|
||||
import com.beust.kobalt.api.Project
|
||||
import com.beust.kobalt.maven.dependency.MavenDependency
|
||||
import com.beust.kobalt.misc.KFiles
|
||||
import com.beust.kobalt.misc.log
|
||||
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 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>,
|
||||
rDirectory: String) {
|
||||
val logger = StdLogger(StdLogger.Level.VERBOSE)
|
||||
|
@ -77,7 +81,7 @@ class AndroidBuild {
|
|||
val javaProcessExecutor = KobaltJavaProcessExecutor()
|
||||
val androidHome = File(AndroidFiles.androidHome(project, config))
|
||||
val sdkLoader : SdkLoader = DefaultSdkLoader.getLoader(androidHome)
|
||||
val androidBuilder = AndroidBuilder(project.name, "kobalt-android-plugin",
|
||||
androidBuilder = AndroidBuilder(project.name, "kobalt-android-plugin",
|
||||
processExecutor,
|
||||
javaProcessExecutor,
|
||||
KobaltErrorReporter(),
|
||||
|
@ -121,7 +125,7 @@ class AndroidBuild {
|
|||
}.filter {
|
||||
it.exists()
|
||||
}
|
||||
val libraries = listOf<ManifestDependency>()
|
||||
val libraries = createLibraryDependencies(project, project.compileDependencies)
|
||||
val outManifest = AndroidFiles.mergedManifest(project, variant)
|
||||
val outAaptSafeManifestLocation = KFiles.joinDir(project.directory, project.buildDirectory, "generatedSafeAapt")
|
||||
val reportFile = File(KFiles.joinDir(project.directory, project.buildDirectory, "manifest-merger-report.txt"))
|
||||
|
@ -210,4 +214,32 @@ class AndroidBuild {
|
|||
|
||||
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.maven.MavenId
|
||||
import com.beust.kobalt.misc.KFiles
|
||||
import java.nio.file.Paths
|
||||
|
||||
class AndroidFiles {
|
||||
companion object {
|
||||
|
@ -26,9 +25,14 @@ class AndroidFiles {
|
|||
fun mergedResources(project: Project, variant: Variant) =
|
||||
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) =
|
||||
Paths.get(intermediates(project), "exploded-aar", mavenId.groupId, mavenId.artifactId, mavenId.version,
|
||||
"classes.jar").toFile().path
|
||||
KFiles.joinDir(exploded(project, mavenId), "classes.jar")
|
||||
|
||||
fun classesDir(project: Project, variant: Variant): String =
|
||||
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> {
|
||||
val result = arrayListOf<BuildConfigField>()
|
||||
configurationFor(project)?.let { config ->
|
||||
result.add(BuildConfigField("String", "VERSION_NAME", "\"${config.versionName}\""))
|
||||
result.add(BuildConfigField("int", "VERSION_CODE", "${config.versionCode}"))
|
||||
result.add(BuildConfigField("String", "VERSION_NAME", "\"${config.defaultConfig.versionName}\""))
|
||||
result.add(BuildConfigField("int", "VERSION_CODE", "${config.defaultConfig.versionCode}"))
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
@ -416,13 +416,16 @@ public class AndroidPlugin @Inject constructor(val javaCompiler: JavaCompiler, v
|
|||
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,
|
||||
var compileSdkVersion : 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,
|
||||
val androidHome: String? = null) {
|
||||
|
||||
|
@ -431,6 +434,12 @@ class AndroidConfig(val project: Project,
|
|||
fun addSigningConfig(name: String, project: Project, signingConfig: SigningConfig) {
|
||||
signingConfigs.put(name, signingConfig)
|
||||
}
|
||||
|
||||
var defaultConfig: DefaultConfig = DefaultConfig()
|
||||
|
||||
fun defaultConfig(init: DefaultConfig.() -> Unit) {
|
||||
defaultConfig = DefaultConfig().apply { init() }
|
||||
}
|
||||
}
|
||||
|
||||
@Directive
|
||||
|
|
|
@ -5,23 +5,22 @@ import com.android.xml.AndroidManifest
|
|||
import java.io.File
|
||||
|
||||
/**
|
||||
* Manage the main application id for the app, based on an overlay of the AndroidManifest.xml and
|
||||
* values specified in the Android config (in the build file).
|
||||
* Manage the main application id for the app: values from androidConfig{} have precedence over values
|
||||
* found in the manifest.
|
||||
*/
|
||||
class AppInfo(val androidManifest: File, val config: AndroidConfig) {
|
||||
val abstractManifest = FileWrapper(androidManifest)
|
||||
|
||||
private fun <T> overlay(manifestValue: T, configValue: T?) = configValue ?: manifestValue
|
||||
|
||||
val versionCode : Int
|
||||
get() = overlay(AndroidManifest.getVersionCode(abstractManifest), config.versionCode)
|
||||
get() = config.defaultConfig.versionCode ?: AndroidManifest.getVersionCode(abstractManifest)
|
||||
|
||||
val versionName : String
|
||||
get() = versionCode.toString()
|
||||
get() = config.defaultConfig.versionName ?: versionCode.toString()
|
||||
|
||||
val minSdkVersion: String?
|
||||
get() = overlay(AndroidManifest.getMinSdkVersion(abstractManifest), config.minSdkVersion)?.toString()
|
||||
get() = config.defaultConfig.minSdkVersion ?: AndroidManifest.getMinSdkVersion(abstractManifest)?.toString()
|
||||
|
||||
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