@@ -95,6 +95,33 @@ task $_gradleGetClasspathTaskName(type: Copy) {
95
95
}
96
96
}
97
97
}
98
+ ''' ;
99
+
100
+ static const _gradleGetClasspathStubKt = '''
101
+ // Gradle stub for listing dependencies in jnigen. If found in
102
+ // android/build.gradle.kts, please delete the following function.
103
+ tasks.register<DefaultTask>("$_gradleGetClasspathTaskName ") {
104
+ doLast {
105
+ try {
106
+ val app = project(":app")
107
+ val android = app.android
108
+ val classPaths = mutableListOf(android.bootClasspath.first()) // Access the first element directly
109
+ for (variant in android.applicationVariants) {
110
+ if (variant.name == "release") {
111
+ val javaCompile = variant.javaCompileProvider.get()
112
+ classPaths.addAll(javaCompile.classpath.files)
113
+ }
114
+ }
115
+ for (classPath in classPaths) {
116
+ println(classPath)
117
+ }
118
+ } catch (e: Exception) {
119
+ System.err.println("$_gradleCannotFindJars ")
120
+ throw e
121
+ }
122
+ }
123
+ System.err.println("$_leftOverStubWarning ")
124
+ }
98
125
''' ;
99
126
100
127
static const _gradleGetSourcesTaskName = 'getSources' ;
@@ -129,6 +156,42 @@ task $_gradleGetSourcesTaskName(type: Copy) {
129
156
}
130
157
System.err.println("$_leftOverStubWarning ")
131
158
}
159
+ ''' ;
160
+
161
+ static const _gradleGetSourcesStubKt = '''
162
+ // Gradle stub for fetching source dependencies in jnigen. If found in
163
+ // android/build.gradle.kts, please delete the following function.
164
+
165
+ tasks.register<DefaultTask>("$_gradleGetSourcesTaskName ") {
166
+ doLast {
167
+ val app = project(":app")
168
+ val releaseCompileClasspath = app.configurations.getByName("releaseCompileClasspath")
169
+
170
+ val componentIds =
171
+ releaseCompileClasspath.incoming.resolutionResult.allDependencies.map { it.from.id }
172
+
173
+ val result = dependencies.createArtifactResolutionQuery()
174
+ .forComponents(componentIds)
175
+ .withArtifacts(JvmLibrary::class, SourcesArtifact::class)
176
+ .execute()
177
+
178
+ val sourceArtifacts = mutableListOf<File>()
179
+
180
+ for (component in result.resolvedComponents) {
181
+ val sourcesArtifactsResult = component.getArtifacts(SourcesArtifact::class)
182
+ for (artifactResult in sourcesArtifactsResult) {
183
+ if (artifactResult is org.gradle.api.artifacts.result.ResolvedArtifactResult) {
184
+ sourceArtifacts.add(artifactResult.file)
185
+ }
186
+ }
187
+ }
188
+ for (sourceArtifact in sourceArtifacts) {
189
+ println(sourceArtifact)
190
+ }
191
+ }
192
+ System.err.println("$_leftOverStubWarning ")
193
+ }
194
+
132
195
''' ;
133
196
134
197
/// Get release compile classpath used by Gradle for android build.
@@ -142,8 +205,7 @@ task $_gradleGetSourcesTaskName(type: Copy) {
142
205
static List <String > getGradleClasspaths (
143
206
{Uri ? configRoot, String androidProject = '.' }) =>
144
207
_runGradleStub (
145
- stubName: _gradleGetClasspathTaskName,
146
- stubCode: _gradleGetClasspathStub,
208
+ isSource: false ,
147
209
androidProject: androidProject,
148
210
configRoot: configRoot,
149
211
);
@@ -156,8 +218,7 @@ task $_gradleGetSourcesTaskName(type: Copy) {
156
218
static List <String > getGradleSources (
157
219
{Uri ? configRoot, String androidProject = '.' }) {
158
220
return _runGradleStub (
159
- stubName: _gradleGetSourcesTaskName,
160
- stubCode: _gradleGetSourcesStub,
221
+ isSource: true ,
161
222
androidProject: androidProject,
162
223
configRoot: configRoot,
163
224
);
@@ -168,18 +229,34 @@ task $_gradleGetSourcesTaskName(type: Copy) {
168
229
}
169
230
170
231
static List <String > _runGradleStub ({
171
- required String stubName,
172
- required String stubCode,
232
+ required bool isSource,
173
233
Uri ? configRoot,
174
234
String androidProject = '.' ,
175
235
}) {
236
+ final stubName =
237
+ isSource ? _gradleGetSourcesTaskName : _gradleGetClasspathTaskName;
176
238
log.info ('trying to obtain gradle dependencies [$stubName ]...' );
177
239
if (configRoot != null ) {
178
240
androidProject = configRoot.resolve (androidProject).toFilePath ();
179
241
}
180
242
final android = join (androidProject, 'android' );
181
- final buildGradle = join (android, 'build.gradle' );
182
- final buildGradleOld = join (android, 'build.gradle.old' );
243
+ var buildGradle = join (android, 'build.gradle' );
244
+ final usesKotlinScript = ! File .fromUri (Uri .file (buildGradle)).existsSync ();
245
+ if (usesKotlinScript) {
246
+ // The Kotlin version of the script is injected to `app/build.gradle.kts`
247
+ // instead of `build.gradle`.
248
+ buildGradle = join (android, 'app' , 'build.gradle.kts' );
249
+ }
250
+ final String stubCode;
251
+ if (isSource) {
252
+ stubCode =
253
+ usesKotlinScript ? _gradleGetSourcesStubKt : _gradleGetSourcesStub;
254
+ } else {
255
+ stubCode = usesKotlinScript
256
+ ? _gradleGetClasspathStubKt
257
+ : _gradleGetClasspathStub;
258
+ }
259
+ final buildGradleOld = '$buildGradle .old' ;
183
260
final origBuild = File (buildGradle);
184
261
final script = origBuild.readAsStringSync ();
185
262
origBuild.renameSync (buildGradleOld);
0 commit comments