Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ object RNSourceSets {
}

private fun configureTasks() {
val projectName = project.name
val appProjectName = appProject.name

project.tasks.register("copyAutolinkingSources", Copy::class.java) {
Expand All @@ -108,33 +107,19 @@ object RNSourceSets {
patchRNEntryPoint(it, path)
}

androidExtension.buildTypes.forEach { buildType ->
val capitalisedBuildType = buildType.name.replaceFirstChar { it.titlecase() }
val codegenTaskName = "generateCodegenSchemaFromJavaScript"
val strippedNativeLibsPath = "$appBuildDir/intermediates/stripped_native_libs"
val strippedDebugSymbolsPath = "strip${capitalisedBuildType}DebugSymbols/out/lib"

val copyLibTask =
project.tasks.register("copy${capitalisedBuildType}LibSources", Copy::class.java) {
it.dependsOn(":$appProjectName:$codegenTaskName")
it.dependsOn(":$appProjectName:strip${capitalisedBuildType}DebugSymbols")
it.dependsOn(":$projectName:$codegenTaskName")

it.from(
"$strippedNativeLibsPath/${buildType.name}/$strippedDebugSymbolsPath",
)
it.into(project.rootProject.file("$projectName/libs$capitalisedBuildType"))
it.include("**/libappmodules.so", "**/libreact_codegen_*.so")
extension.dynamicLibs.forEach { lib -> it.include("**/$lib") }
}

project.tasks.named("preBuild").configure {
it.dependsOn("copyAutolinkingSources")
it.dependsOn(copyLibTask)
if (capitalisedBuildType == "Release") {
it.dependsOn(":${appProject.name}:createBundleReleaseJsAndAssets")
}
}
project.tasks.named("preBuild").configure {
/**
* Ensure auto-generated sources are available before compilation.
*
* This hooks into the global `preBuild` task, so the dependency runs
* regardless of build variant. Use this only when the generated sources
* are identical for all variants (debug/release).
*
* If variant-specific
* files are needed, prefer `preDebugBuild` / `preReleaseBuild` under
* `VariantProcessor.processVariant`
*/
it.dependsOn("copyAutolinkingSources")
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ import com.callstack.react.brownfield.exceptions.TaskNotFound
import com.callstack.react.brownfield.shared.BaseProject
import com.callstack.react.brownfield.shared.Logging
import com.callstack.react.brownfield.utils.AndroidArchiveLibrary
import com.callstack.react.brownfield.utils.Extension
import org.gradle.api.Task
import org.gradle.api.tasks.Copy
import org.gradle.api.tasks.TaskProvider
import java.io.File

class JNILibsProcessor : BaseProject() {
Expand All @@ -34,8 +37,11 @@ class JNILibsProcessor : BaseProject() {
}

val androidExtension = project.extensions.getByName("android") as LibraryExtension
val copyTask = copySoLibsTask(variant)

mergeJniLibsTask.configure {
it.dependsOn(explodeTasks)
it.dependsOn(copyTask)

it.doFirst {
for (archiveLibrary in aarLibraries) {
Expand All @@ -50,6 +56,36 @@ class JNILibsProcessor : BaseProject() {
}
}

private fun copySoLibsTask(variant: LibraryVariant): TaskProvider<Copy> {
val variantName = variant.name
val capitalizedVariant = variantName.replaceFirstChar(Char::titlecase)

val projectExt = project.extensions.getByType(Extension::class.java)
val appProject = project.rootProject.project(projectExt.appProjectName)
val appBuildDir = appProject.layout.buildDirectory.get()

val stripTask = ":${appProject.name}:strip${capitalizedVariant}DebugSymbols"
val codegenTask = ":${project.name}:generateCodegenSchemaFromJavaScript"

val fromDir =
appBuildDir
.dir("intermediates/stripped_native_libs/$variantName/strip${capitalizedVariant}DebugSymbols/out/lib")
.asFile

val intoDir =
project.rootProject
.file("${project.name}/libs$capitalizedVariant")

return project.tasks.register("copy${capitalizedVariant}LibSources", Copy::class.java) {
it.dependsOn(stripTask, codegenTask)
it.from(fromDir)
it.into(intoDir)

it.include("**/libappmodules.so", "**/libreact_codegen_*.so")
projectExt.dynamicLibs.forEach { lib -> it.include("**/$lib") }
}
}

private fun processNestedLibs(files: Array<File>?) {
val existingJNILibs =
listOf("arm64-v8a", "armeabi-v7a", "x86_64", "x86")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
package com.callstack.react.brownfield.processors

import com.android.build.gradle.api.LibraryVariant
import com.android.build.gradle.internal.tasks.factory.dependsOn
import com.callstack.react.brownfield.artifacts.ArtifactsResolver.Companion.ARTIFACT_TYPE_AAR
import com.callstack.react.brownfield.artifacts.ArtifactsResolver.Companion.ARTIFACT_TYPE_JAR
import com.callstack.react.brownfield.exceptions.TaskNotFound
Expand Down Expand Up @@ -54,6 +55,10 @@ class VariantProcessor(private val variant: LibraryVariant) : BaseProject() {
throw TaskNotFound("Can not find $preBuildTaskPath task")
}

if (upperCaseVariantName == "Release") {
prepareTask.dependsOn(":app:createBundleReleaseJsAndAssets")
}

val bundleTask = variantTaskProvider.bundleTaskProvider(project, variant.name)
explodeArtifactFiles(artifacts, prepareTask, bundleTask)
mergeClassesAndJars(bundleTask)
Expand Down
Loading