mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-27 00:38:11 -07:00
Better logging.
This commit is contained in:
parent
2ef4a4e3e9
commit
cd541f34cf
3 changed files with 110 additions and 85 deletions
|
@ -59,12 +59,12 @@ class Variant(val initialProductFlavor: ProductFlavorConfig? = null,
|
||||||
// // The ordering of files is: 1) build type 2) product flavor 3) default
|
// // The ordering of files is: 1) build type 2) product flavor 3) default
|
||||||
buildType.let {
|
buildType.let {
|
||||||
val dir = File(KFiles.joinDir("src", it.name, project.projectInfo.sourceDirectory))
|
val dir = File(KFiles.joinDir("src", it.name, project.projectInfo.sourceDirectory))
|
||||||
log(2, "Adding source for build type ${it.name}: ${dir.path}")
|
log(3, "Adding source for build type ${it.name}: ${dir.path}")
|
||||||
result.add(dir)
|
result.add(dir)
|
||||||
}
|
}
|
||||||
productFlavor.let {
|
productFlavor.let {
|
||||||
val dir = File(KFiles.joinDir("src", it.name, project.projectInfo.sourceDirectory))
|
val dir = File(KFiles.joinDir("src", it.name, project.projectInfo.sourceDirectory))
|
||||||
log(2, "Adding source for product flavor ${it.name}: ${dir.path}")
|
log(3, "Adding source for product flavor ${it.name}: ${dir.path}")
|
||||||
result.add(dir)
|
result.add(dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,16 @@ fun Any.log(level: Int, text: String, newLine : Boolean = true) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Any.logWrap(level: Int, text1: String, text2: String, function: () -> Unit) {
|
||||||
|
if (level <= KobaltLogger.LOG_LEVEL) {
|
||||||
|
KobaltLogger.logger.log(javaClass.simpleName, text1, newLine = false)
|
||||||
|
}
|
||||||
|
function()
|
||||||
|
if (level <= KobaltLogger.LOG_LEVEL) {
|
||||||
|
KobaltLogger.logger.log(javaClass.simpleName, text2, newLine = true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun Any.debug(text: String) {
|
fun Any.debug(text: String) {
|
||||||
KobaltLogger.logger.debug(javaClass.simpleName, text)
|
KobaltLogger.logger.debug(javaClass.simpleName, text)
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,9 @@ 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.maven.dependency.MavenDependency
|
||||||
import com.beust.kobalt.misc.KFiles
|
import com.beust.kobalt.misc.KFiles
|
||||||
|
import com.beust.kobalt.misc.KobaltLogger
|
||||||
import com.beust.kobalt.misc.log
|
import com.beust.kobalt.misc.log
|
||||||
|
import com.beust.kobalt.misc.logWrap
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class KobaltProcessResult : ProcessResult {
|
class KobaltProcessResult : ProcessResult {
|
||||||
|
@ -50,7 +52,7 @@ class KobaltJavaProcessExecutor : JavaProcessExecutor {
|
||||||
|
|
||||||
class KobaltProcessOutputHandler : BaseProcessOutputHandler() {
|
class KobaltProcessOutputHandler : BaseProcessOutputHandler() {
|
||||||
override fun handleOutput(processOutput: ProcessOutput) =
|
override fun handleOutput(processOutput: ProcessOutput) =
|
||||||
log(1, "AndroidBuild output" + processOutput.standardOutput)
|
log(3, "AndroidBuild output" + processOutput.standardOutput)
|
||||||
}
|
}
|
||||||
|
|
||||||
class KobaltErrorReporter : ErrorReporter(ErrorReporter.EvaluationMode.STANDARD) {
|
class KobaltErrorReporter : ErrorReporter(ErrorReporter.EvaluationMode.STANDARD) {
|
||||||
|
@ -72,7 +74,12 @@ class ProjectLayout {
|
||||||
class KobaltResourceMerger {
|
class KobaltResourceMerger {
|
||||||
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 level = when(KobaltLogger.LOG_LEVEL) {
|
||||||
|
3 -> StdLogger.Level.VERBOSE
|
||||||
|
2 -> StdLogger.Level.WARNING
|
||||||
|
else -> StdLogger.Level.ERROR
|
||||||
|
}
|
||||||
|
val logger = StdLogger(level)
|
||||||
val androidBuilder = createAndroidBuilder(project, config, logger)
|
val androidBuilder = createAndroidBuilder(project, config, logger)
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -144,116 +151,124 @@ class KobaltResourceMerger {
|
||||||
|
|
||||||
private fun processAssets(project: Project, variant: Variant, androidBuilder: AndroidBuilder,
|
private fun processAssets(project: Project, variant: Variant, androidBuilder: AndroidBuilder,
|
||||||
aarDependencies: List<File>) {
|
aarDependencies: List<File>) {
|
||||||
val intermediates = File(
|
logWrap(2, " Processing assets...", "done") {
|
||||||
KFiles.joinDir(AndroidFiles.intermediates(project), "assets", variant.toIntermediateDir()))
|
val intermediates = File(
|
||||||
aarDependencies.forEach {
|
KFiles.joinDir(AndroidFiles.intermediates(project), "assets", variant.toIntermediateDir()))
|
||||||
val assetDir = File(it, "assets")
|
aarDependencies.forEach {
|
||||||
if (assetDir.exists()) {
|
val assetDir = File(it, "assets")
|
||||||
KFiles.copyRecursively(assetDir, intermediates)
|
if (assetDir.exists()) {
|
||||||
|
KFiles.copyRecursively(assetDir, intermediates)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processManifests(project: Project, variant: Variant, androidBuilder: AndroidBuilder,
|
private fun processManifests(project: Project, variant: Variant, androidBuilder: AndroidBuilder,
|
||||||
config: AndroidConfig) {
|
config: AndroidConfig) {
|
||||||
val manifestOverlays = variant.allDirectories(project).map {
|
logWrap(2, " Processing manifests...", "done") {
|
||||||
File("src/$it/AndroidManifest.xml")
|
val manifestOverlays = variant.allDirectories(project).map {
|
||||||
}.filter {
|
File("src/$it/AndroidManifest.xml")
|
||||||
it.exists()
|
}.filter {
|
||||||
|
it.exists()
|
||||||
|
}
|
||||||
|
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"))
|
||||||
|
val mainManifest = File("src/main/AndroidManifest.xml")
|
||||||
|
val appInfo = AppInfo(mainManifest, config)
|
||||||
|
androidBuilder.mergeManifests(mainManifest, manifestOverlays, libraries,
|
||||||
|
null /* package override */,
|
||||||
|
appInfo.versionCode,
|
||||||
|
appInfo.versionName,
|
||||||
|
appInfo.minSdkVersion,
|
||||||
|
appInfo.targetSdkVersion,
|
||||||
|
appInfo.maxSdkVersion,
|
||||||
|
outManifest,
|
||||||
|
outAaptSafeManifestLocation,
|
||||||
|
// TODO: support aar too
|
||||||
|
ManifestMerger2.MergeType.APPLICATION,
|
||||||
|
emptyMap() /* placeHolders */,
|
||||||
|
reportFile)
|
||||||
}
|
}
|
||||||
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"))
|
|
||||||
val mainManifest = File("src/main/AndroidManifest.xml")
|
|
||||||
val appInfo = AppInfo(mainManifest, config)
|
|
||||||
androidBuilder.mergeManifests(mainManifest, manifestOverlays, libraries,
|
|
||||||
null /* package override */,
|
|
||||||
appInfo.versionCode,
|
|
||||||
appInfo.versionName,
|
|
||||||
appInfo.minSdkVersion,
|
|
||||||
appInfo.targetSdkVersion,
|
|
||||||
appInfo.maxSdkVersion,
|
|
||||||
outManifest,
|
|
||||||
outAaptSafeManifestLocation,
|
|
||||||
// TODO: support aar too
|
|
||||||
ManifestMerger2.MergeType.APPLICATION,
|
|
||||||
emptyMap() /* placeHolders */,
|
|
||||||
reportFile)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processResources(project: Project, variant: Variant, androidBuilder: AndroidBuilder,
|
private fun processResources(project: Project, variant: Variant, androidBuilder: AndroidBuilder,
|
||||||
aarDependencies: List<File>, logger: ILogger, processOutputHandler: KobaltProcessOutputHandler) {
|
aarDependencies: List<File>, logger: ILogger, processOutputHandler: KobaltProcessOutputHandler) {
|
||||||
val layout = ProjectLayout()
|
logWrap(2, " Processing resources...", "done") {
|
||||||
val preprocessor = NoOpResourcePreprocessor()
|
val layout = ProjectLayout()
|
||||||
val outputDir = AndroidFiles.mergedResources(project, variant)
|
val preprocessor = NoOpResourcePreprocessor()
|
||||||
val resourceMerger = ResourceMerger()
|
val outputDir = AndroidFiles.mergedResources(project, variant)
|
||||||
val fullVariantDir = File(variant.toCamelcaseDir())
|
val resourceMerger = ResourceMerger()
|
||||||
val srcList = listOf("main", variant.productFlavor.name, variant.buildType.name, fullVariantDir.path)
|
val fullVariantDir = File(variant.toCamelcaseDir())
|
||||||
.map { "src" + File.separator + it}
|
val srcList = listOf("main", variant.productFlavor.name, variant.buildType.name, fullVariantDir.path)
|
||||||
|
.map { "src" + File.separator + it }
|
||||||
|
|
||||||
// TODO: figure out why the badSrcList is bad. All this information should be coming from the Variant
|
// TODO: figure out why the badSrcList is bad. All this information should be coming from the Variant
|
||||||
val badSrcList = variant.resDirectories(project).map { it.path }
|
val badSrcList = variant.resDirectories(project).map { it.path }
|
||||||
val goodAarList = aarDependencies.map { it.path + File.separator}
|
val goodAarList = aarDependencies.map { it.path + File.separator }
|
||||||
(goodAarList + srcList).map { it + File.separator + "res" }.forEach { path ->
|
(goodAarList + srcList).map { it + File.separator + "res" }.forEach { path ->
|
||||||
with(ResourceSet(path)) {
|
with(ResourceSet(path)) {
|
||||||
addSource(File(path))
|
addSource(File(path))
|
||||||
loadFromFiles(logger)
|
loadFromFiles(logger)
|
||||||
setGeneratedSet(GeneratedResourceSet(this))
|
setGeneratedSet(GeneratedResourceSet(this))
|
||||||
resourceMerger.addDataSet(this)
|
resourceMerger.addDataSet(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
val writer = MergedResourceWriter(File(outputDir),
|
val writer = MergedResourceWriter(File(outputDir),
|
||||||
androidBuilder.getAaptCruncher(processOutputHandler),
|
androidBuilder.getAaptCruncher(processOutputHandler),
|
||||||
false /* don't crunch */,
|
false /* don't crunch */,
|
||||||
false /* don't process 9patch */,
|
false /* don't process 9patch */,
|
||||||
layout.publicText,
|
layout.publicText,
|
||||||
layout.mergeBlame,
|
layout.mergeBlame,
|
||||||
preprocessor)
|
preprocessor)
|
||||||
resourceMerger.mergeData(writer, true)
|
resourceMerger.mergeData(writer, true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun mergeResources(project: Project, variant: Variant, androidBuilder: AndroidBuilder,
|
private fun mergeResources(project: Project, variant: Variant, androidBuilder: AndroidBuilder,
|
||||||
aarDependencies: List<File>, rDirectory: String,
|
aarDependencies: List<File>, rDirectory: String,
|
||||||
processOutputHandler: KobaltProcessOutputHandler) {
|
processOutputHandler: KobaltProcessOutputHandler) {
|
||||||
val aaptOptions = object : AaptOptions {
|
logWrap(2, " Merging resources...", "done") {
|
||||||
override fun getAdditionalParameters() = emptyList<String>()
|
|
||||||
override fun getFailOnMissingConfigEntry() = false
|
|
||||||
override fun getIgnoreAssets() = null
|
|
||||||
override fun getNoCompress() = null
|
|
||||||
}
|
|
||||||
|
|
||||||
val aaptCommand = AaptPackageProcessBuilder(File(AndroidFiles.mergedManifest(project, variant)),
|
val aaptOptions = object : AaptOptions {
|
||||||
aaptOptions)
|
override fun getAdditionalParameters() = emptyList<String>()
|
||||||
|
override fun getFailOnMissingConfigEntry() = false
|
||||||
|
override fun getIgnoreAssets() = null
|
||||||
|
override fun getNoCompress() = null
|
||||||
|
}
|
||||||
|
|
||||||
fun toSymbolFileProvider(aarDirectory: File) = object: SymbolFileProvider {
|
val aaptCommand = AaptPackageProcessBuilder(File(AndroidFiles.mergedManifest(project, variant)),
|
||||||
override fun getManifest() = File(aarDirectory, "AndroidManifest.xml")
|
aaptOptions)
|
||||||
override fun isOptional() = false
|
|
||||||
override fun getSymbolFile() = File(aarDirectory, "R.txt")
|
|
||||||
}
|
|
||||||
|
|
||||||
val variantDir = variant.toIntermediateDir()
|
fun toSymbolFileProvider(aarDirectory: File) = object : SymbolFileProvider {
|
||||||
val generated = KFiles.joinAndMakeDir(project.directory, project.buildDirectory, "symbols")
|
override fun getManifest() = File(aarDirectory, "AndroidManifest.xml")
|
||||||
with(aaptCommand) {
|
override fun isOptional() = false
|
||||||
setSourceOutputDir(rDirectory)
|
override fun getSymbolFile() = File(aarDirectory, "R.txt")
|
||||||
val libraries = aarDependencies.map { toSymbolFileProvider(it) }
|
}
|
||||||
setLibraries(libraries)
|
|
||||||
val r = libraries[0].symbolFile
|
val variantDir = variant.toIntermediateDir()
|
||||||
setResFolder(File(AndroidFiles.mergedResources(project, variant)))
|
val generated = KFiles.joinAndMakeDir(project.directory, project.buildDirectory, "symbols")
|
||||||
setAssetsFolder(File(KFiles.joinAndMakeDir(AndroidFiles.intermediates(project), "assets", variantDir)))
|
with(aaptCommand) {
|
||||||
aaptCommand.setResPackageOutput(AndroidFiles.temporaryApk(project, variant.shortArchiveName))
|
setSourceOutputDir(rDirectory)
|
||||||
aaptCommand.setSymbolOutputDir(generated)
|
val libraries = aarDependencies.map { toSymbolFileProvider(it) }
|
||||||
|
setLibraries(libraries)
|
||||||
|
val r = libraries[0].symbolFile
|
||||||
|
setResFolder(File(AndroidFiles.mergedResources(project, variant)))
|
||||||
|
setAssetsFolder(File(KFiles.joinAndMakeDir(AndroidFiles.intermediates(project), "assets", variantDir)))
|
||||||
|
aaptCommand.setResPackageOutput(AndroidFiles.temporaryApk(project, variant.shortArchiveName))
|
||||||
|
aaptCommand.setSymbolOutputDir(generated)
|
||||||
|
|
||||||
// aaptCommand.setSourceOutputDir(generated)
|
// aaptCommand.setSourceOutputDir(generated)
|
||||||
// aaptCommand.setPackageForR(pkg)
|
// aaptCommand.setPackageForR(pkg)
|
||||||
// aaptCommand.setProguardOutput(proguardTxt)
|
// aaptCommand.setProguardOutput(proguardTxt)
|
||||||
// aaptCommand.setType(if (lib) VariantType.LIBRARY else VariantType.DEFAULT)
|
// aaptCommand.setType(if (lib) VariantType.LIBRARY else VariantType.DEFAULT)
|
||||||
// aaptCommand.setDebuggable(debug)
|
// aaptCommand.setDebuggable(debug)
|
||||||
|
}
|
||||||
|
|
||||||
|
androidBuilder.processResources(aaptCommand, true, processOutputHandler)
|
||||||
}
|
}
|
||||||
|
|
||||||
androidBuilder.processResources(aaptCommand, true, processOutputHandler)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun dex(project: Project) {
|
fun dex(project: Project) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue