mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-26 08:27:12 -07:00
Proguard preliminary work.
This commit is contained in:
parent
21aca77947
commit
dfa429336b
4 changed files with 48 additions and 14 deletions
|
@ -131,7 +131,7 @@ class Variant(val initialProductFlavor: ProductFlavorConfig? = null,
|
|||
|
||||
companion object {
|
||||
val DEFAULT_PRODUCT_FLAVOR = ProductFlavorConfig("")
|
||||
val DEFAULT_BUILD_TYPE = BuildTypeConfig("")
|
||||
val DEFAULT_BUILD_TYPE = BuildTypeConfig(null, "")
|
||||
|
||||
fun allVariants(project: Project): List<Variant> {
|
||||
val result = arrayListOf<Variant>()
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
package com.beust.kobalt.api
|
||||
|
||||
import com.beust.kobalt.Plugins
|
||||
import com.beust.kobalt.api.annotation.Directive
|
||||
import com.beust.kobalt.internal.IProjectInfo
|
||||
import com.beust.kobalt.maven.IClasspathDependency
|
||||
import com.beust.kobalt.maven.MavenDependency
|
||||
import com.beust.kobalt.misc.KFiles
|
||||
import com.beust.kobalt.plugin.android.AndroidPlugin
|
||||
import com.beust.kobalt.plugin.android.Proguard
|
||||
import java.util.*
|
||||
|
||||
open public class Project(
|
||||
|
@ -188,12 +191,20 @@ fun Project.productFlavor(name: String, init: ProductFlavorConfig.() -> Unit) =
|
|||
addProductFlavor(name, this)
|
||||
}
|
||||
|
||||
class BuildTypeConfig(val name: String) : IBuildConfig {
|
||||
class BuildTypeConfig(val project: Project?, val name: String) : IBuildConfig {
|
||||
var minifyEnabled = false
|
||||
var proguardFile: String? = null
|
||||
|
||||
fun getDefaultProguardFile(name: String) : String {
|
||||
val androidPlugin = Plugins.findPlugin(AndroidPlugin.PLUGIN_NAME) as AndroidPlugin
|
||||
return Proguard(androidPlugin.androidHome(project)).getDefaultProguardFile(name)
|
||||
}
|
||||
|
||||
override var buildConfig: BuildConfig? = null
|
||||
}
|
||||
|
||||
@Directive
|
||||
fun Project.buildType(name: String, init: BuildTypeConfig.() -> Unit) = BuildTypeConfig(name).apply {
|
||||
fun Project.buildType(name: String, init: BuildTypeConfig.() -> Unit) = BuildTypeConfig(this, name).apply {
|
||||
init()
|
||||
addBuildType(name, this)
|
||||
}
|
||||
|
|
|
@ -31,6 +31,8 @@ public class AndroidPlugin @Inject constructor(val javaCompiler: JavaCompiler, v
|
|||
companion object {
|
||||
const val PLUGIN_NAME = "Android"
|
||||
const val TASK_GENERATE_DEX = "generateDex"
|
||||
const val TASK_SIGN_APK = "signApk"
|
||||
const val TASK_INSTALL= "install"
|
||||
}
|
||||
|
||||
override val name = PLUGIN_NAME
|
||||
|
@ -50,6 +52,8 @@ public class AndroidPlugin @Inject constructor(val javaCompiler: JavaCompiler, v
|
|||
runTask = { taskSignApk(project) })
|
||||
addVariantTasks(project, "install", runAfter = listOf("signApk"),
|
||||
runTask = { taskInstall(project) })
|
||||
addVariantTasks(project, "proguard", runBefore = listOf("install"), runAfter = listOf("compile"),
|
||||
runTask = { taskProguard(project) })
|
||||
}
|
||||
context.pluginInfo.classpathContributors.add(this)
|
||||
}
|
||||
|
@ -232,6 +236,22 @@ public class AndroidPlugin @Inject constructor(val javaCompiler: JavaCompiler, v
|
|||
}
|
||||
}
|
||||
|
||||
@Task(name = "proguard", description = "Run Proguard, if enabled", runBefore = arrayOf(TASK_GENERATE_DEX),
|
||||
runAfter = arrayOf("compile"))
|
||||
fun taskProguard(project: Project): TaskResult {
|
||||
val config = configurationFor(project)
|
||||
if (config != null) {
|
||||
val buildType = context.variant.buildType
|
||||
if (buildType.minifyEnabled) {
|
||||
log(1, "minifyEnabled is true, running Proguard")
|
||||
val classesDir = project.classesDir(context)
|
||||
val proguardHome = KFiles.joinDir(androidHome(project), "tools", "proguard")
|
||||
val proguardCommand = KFiles.joinDir(proguardHome, "bin", "proguard.sh")
|
||||
}
|
||||
}
|
||||
return TaskResult()
|
||||
}
|
||||
|
||||
@Task(name = TASK_GENERATE_DEX, description = "Generate the dex file", runBefore = arrayOf("assemble"),
|
||||
runAfter = arrayOf("compile"))
|
||||
fun taskGenerateDex(project: Project): TaskResult {
|
||||
|
@ -258,14 +278,6 @@ public class AndroidPlugin @Inject constructor(val javaCompiler: JavaCompiler, v
|
|||
//KFiles.joinDir(intermediates(project), "dex", context.variant.toIntermediateDir()),
|
||||
project.classesDir(context)
|
||||
))
|
||||
// val args = listOf("--dex", "--output", outClassesDex)
|
||||
// val otherArgs =
|
||||
// project.dependencies?.let {
|
||||
// it.dependencies.map {
|
||||
// it.jarFile.get().path
|
||||
// }.filter { ! it.endsWith(".aar") && ! it.endsWith("android.jar") }
|
||||
// } ?: emptyList()
|
||||
// RunCommand(dx).run(args + otherArgs)
|
||||
|
||||
//
|
||||
// Add classes.dex to existing .ap_
|
||||
|
@ -292,7 +304,7 @@ public class AndroidPlugin @Inject constructor(val javaCompiler: JavaCompiler, v
|
|||
* jarsigner -keystore ~/.android/debug.keystore -storepass android -keypass android -signedjar a.apk a.ap_
|
||||
* androiddebugkey
|
||||
*/
|
||||
@Task(name = "signApk", description = "Sign the apk file", runAfter = arrayOf(TASK_GENERATE_DEX),
|
||||
@Task(name = TASK_SIGN_APK, description = "Sign the apk file", runAfter = arrayOf(TASK_GENERATE_DEX),
|
||||
runBefore = arrayOf("assemble"))
|
||||
fun taskSignApk(project: Project): TaskResult {
|
||||
val apk = apk(project, context.variant.shortArchiveName)
|
||||
|
@ -320,10 +332,10 @@ public class AndroidPlugin @Inject constructor(val javaCompiler: JavaCompiler, v
|
|||
))
|
||||
log(1, "Created $apk")
|
||||
|
||||
return TaskResult(success == 0)
|
||||
return TaskResult(success == 0)
|
||||
}
|
||||
|
||||
@Task(name = "install", description = "Install the apk file", runAfter = arrayOf(TASK_GENERATE_DEX, "assemble"))
|
||||
@Task(name = TASK_INSTALL, description = "Install the apk file", runAfter = arrayOf(TASK_GENERATE_DEX, "assemble"))
|
||||
fun taskInstall(project: Project): TaskResult {
|
||||
val apk = apk(project, context.variant.shortArchiveName)
|
||||
RunCommand(adb(project)).useErrorStreamAsErrorIndicator(false).run(args = listOf(
|
||||
|
@ -438,3 +450,4 @@ fun AndroidConfig.signingConfig(name: String, init: SigningConfig.() -> Unit) :
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
10
src/main/kotlin/com/beust/kobalt/plugin/android/Proguard.kt
Normal file
10
src/main/kotlin/com/beust/kobalt/plugin/android/Proguard.kt
Normal file
|
@ -0,0 +1,10 @@
|
|||
package com.beust.kobalt.plugin.android
|
||||
|
||||
import com.beust.kobalt.misc.KFiles
|
||||
|
||||
class Proguard(val androidHome: String) {
|
||||
val proguardHome = KFiles.joinDir(androidHome, "tools", "proguard")
|
||||
val proguardCommand = KFiles.joinDir(proguardHome, "bin", "proguard.sh")
|
||||
|
||||
fun getDefaultProguardFile(name: String) = KFiles.joinDir(proguardHome, name)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue