dart-lang / native

Dart packages related to FFI and native assets bundling.
BSD 3-Clause "New" or "Revised" License
114 stars 39 forks source link

JNIGEN throws error when generate bindings. #1354

Open yanshouwang opened 1 month ago

yanshouwang commented 1 month ago

Here is the error message.

(jnigen) INFO: ApiSummarizer.jar exists. Skipping build..
(jnigen) FINE: Set log level: ALL
(jnigen) INFO: trying to obtain gradle dependencies [getReleaseCompileClasspath]...
(jnigen) FINER: Writing temporary gradle script with stub "getReleaseCompileClasspath"...
(jnigen) FINER: Running gradle wrapper...
(jnigen) INFO: Restoring build scripts
(jnigen) FINE: Found 64 entries
(jnigen) INFO: execute java -jar .dart_tool/jnigen/ApiSummarizer.jar -c "classes/jetified-listenablefuture-1.0.jar:/Users/yanshouwang/Library/Android/sdk/platforms/android-34/android.jar:/Users/yanshouwang/dev/camerax/camerax_android/example/build/app/intermediates/compile_and_runtime_not_namespaced_r_class_jar/release/R.jar:/Users/yanshouwang/.gradle/caches/transforms-3/a473cb7812e460b9257758011417ada5/transformed/jetified-libs.jar:/Users/yanshouwang/dev/camerax/camerax_android/example/build/camerax_android/intermediates/compile_library_classes_jar/release/classes.jar:/Users/yanshouwang/dev/camerax/camerax_android/example/build/integration_test/intermediates/compile_library_classes_jar/release/classes.jar:/Users/yanshouwang/dev/camerax/camerax_android/example/build/jni/intermediates/compile_library_classes_jar/release/classes.jar:/Users/yanshouwang/.gradle/caches/transforms-3/c3f29f1edd3239c377c034f99c20a82c/transformed/jetified-flutter_embedding_release-1.0.0-edd8546116457bdf1c5bdfb13ecb9463d2bb5ed4.jar:/Users/yanshouwang/.gradle/caches/transforms-3/4c12561b2ae2747671b71e5921208e07/transformed/jetified-window-java-1.0.0-beta04-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/e8f28f4aa3e53326585c527ec8d44f1a/transformed/jetified-window-1.0.0-beta04-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/a3a548c25c3c8b12baa57c674daf2012/transformed/jetified-kotlinx-coroutines-android-1.7.3.jar:/Users/yanshouwang/.gradle/caches/transforms-3/8248f1d13cec7290b255ca01462ad77a/transformed/jetified-kotlinx-coroutines-core-jvm-1.7.3.jar:/Users/yanshouwang/.gradle/caches/transforms-3/d2fed106c5849de6c92444308a9a30af/transformed/jetified-kotlin-stdlib-jdk8-1.8.22.jar:/Users/yanshouwang/.gradle/caches/transforms-3/cec809caf3f4b53dfb6cb1dc65ac49b9/transformed/jetified-armeabi_v7a_release-1.0.0-edd8546116457bdf1c5bdfb13ecb9463d2bb5ed4.jar:/Users/yanshouwang/.gradle/caches/transforms-3/64e1dc5f9c39218cfe32675242cfd05b/transformed/jetified-arm64_v8a_release-1.0.0-edd8546116457bdf1c5bdfb13ecb9463d2bb5ed4.jar:/Users/yanshouwang/.gradle/caches/transforms-3/4b1aac1ab94b6483e2b8257581ce5e71/transformed/jetified-x86_64_release-1.0.0-edd8546116457bdf1c5bdfb13ecb9463d2bb5ed4.jar:/Users/yanshouwang/.gradle/caches/transforms-3/e8d4661b09342cc340ccf5a173aaa969/transformed/jetified-camera-extensions-1.4.0-beta02-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/065d002ccb127adf98dedbd07764cd00/transformed/jetified-camera-mlkit-vision-1.4.0-beta02-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/7ba91978ae3ddb8b370e06639119828f/transformed/jetified-camera-view-1.4.0-beta02-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/8f63566631e649b1e0cbf6dc236b62ef/transformed/jetified-camera-video-1.4.0-beta02-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/ba91191236796d06fbc55ab2bb810435/transformed/jetified-camera-lifecycle-1.4.0-beta02-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/1df3eaba5f67ceda1166546b72797bb4/transformed/jetified-camera-camera2-1.4.0-beta02-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/5cf996c94b3b9e96e6e48a3cc62f1069/transformed/jetified-camera-core-1.4.0-beta02-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/a08d06dab8b70b7ac904c947547557cf/transformed/rules-1.2.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/1584d06e818579f0856f50ceb15ddd8b/transformed/espresso-core-3.2.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/d610a9b20fe8d4a808148d7510deed48/transformed/runner-1.2.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/7877fbc9900ceac0683e6c985297c8f6/transformed/jetified-vision-interfaces-16.0.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/e851a6e55f1caac0a31d1478fcc3111d/transformed/jetified-play-services-tasks-18.0.1-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/2be88967470f29e41424c4fc1536d085/transformed/jetified-play-services-basement-18.0.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/ae010e3eed5792daa185abb19eb23a07/transformed/fragment-1.1.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/3317fac89a195a3c4b5ac46dcdd385b0/transformed/viewpager-1.0.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/4ff4d7a20ae4b90cc144c24ab07a8ca4/transformed/loader-1.0.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/a9696a070aefeb4dc196d17cfd845609/transformed/jetified-activity-1.0.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/00bc4016f37799748a50d2e7c40dd401/transformed/customview-1.0.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/bc63610dc9d29d319d9a8310831736ad/transformed/core-1.6.0-api.jar:/Users/yanshouwang/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-common-java8/2.2.0/cd3478503da69b1a7e0319bd2d1389943db9b364/lifecycle-common-java8-2.2.0.jar:/Users/yanshouwang/.gradle/caches/transforms-3/58ae162724efa226618081bb60e9ab12/transformed/lifecycle-runtime-2.2.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/868dfb50a28cc7190de823080e89d218/transformed/lifecycle-livedata-2.1.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/8edd9ced69710253be92dfeace57d808/transformed/lifecycle-livedata-core-2.1.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/edf0becee105268317ee22be6727943d/transformed/jetified-savedstate-1.0.0-api.jar:/Users/yanshouwang/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-common/2.2.0/4ef09a745007778eef83b92f8f23987a8ea59496/lifecycle-common-2.2.0.jar:/Users/yanshouwang/.gradle/caches/transforms-3/d968ea546b9173b874b0e808d29dcea2/transformed/monitor-1.2.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/2eccc499815d26a2335cf8f2bfd9c633/transformed/versionedparcelable-1.1.1-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/c76b091b5cfe3694442274e73afd447d/transformed/core-runtime-2.1.0-api.jar:/Users/yanshouwang/.gradle/caches/modules-2/files-2.1/androidx.arch.core/core-common/2.1.0/b3152fc64428c9354344bd89848ecddc09b6f07e/core-common-2.1.0.jar:/Users/yanshouwang/.gradle/caches/modules-2/files-2.1/androidx.collection/collection/1.1.0/1f27220b47669781457de0d600849a5de0e89909/collection-1.1.0.jar:/Users/yanshouwang/.gradle/caches/transforms-3/9da1da3dccb533d0f1aa43b473725e04/transformed/lifecycle-viewmodel-2.1.0-api.jar:/Users/yanshouwang/.gradle/caches/modules-2/files-2.1/androidx.annotation/annotation/1.2.0/57136ff68ee784c6e19db34ed4a175338fadfde1/annotation-1.2.0.jar:/Users/yanshouwang/.gradle/caches/transforms-3/5714f35efe899dd0d005533a560c106b/transformed/jetified-annotation-experimental-1.4.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/1489d0dc668d1b45b5158203e57d5478/transformed/jetified-kotlin-stdlib-jdk7-1.8.22.jar:/Users/yanshouwang/.gradle/caches/transforms-3/a7ce25e9d4a7d35349ba55deaf7644ab/transformed/jetified-kotlin-stdlib-1.8.22.jar:/Users/yanshouwang/.gradle/caches/transforms-3/ddae8d9443506991fd77305380135b70/transformed/jetified-kotlin-stdlib-common-1.8.22.jar:/Users/yanshouwang/.gradle/caches/transforms-3/cc7e6942aad3cee327d54f6758d4254d/transformed/jetified-annotations-23.0.0.jar:/Users/yanshouwang/.gradle/caches/transforms-3/03f7c26f446d76cca35cfdf739539d39/transformed/jetified-listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:/Users/yanshouwang/.gradle/caches/transforms-3/23b3fd543ae0d043dfcc7fadc18fb877/transformed/jetified-tracing-1.0.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/edba4ca4738e6e4987df90fa9b5cbb0f/transformed/jetified-junit-4.12.jar:/Users/yanshouwang/.gradle/caches/transforms-3/5016bea5abe36b772b039657ac550d63/transformed/jetified-hamcrest-integration-1.3.jar:/Users/yanshouwang/.gradle/caches/transforms-3/eaaf4db639ef32e07a6e620f0d5b335b/transformed/jetified-hamcrest-library-1.3.jar:/Users/yanshouwang/.gradle/caches/transforms-3/2be7be2f4e98f7969936b30ca4d29324/transformed/jetified-hamcrest-core-1.3.jar:/Users/yanshouwang/.gradle/caches/transforms-3/a3ab3bbb5ac550c2c6a0e8385f95cd1b/transformed/jetified-kxml2-2.3.0.jar:/Users/yanshouwang/.gradle/caches/transforms-3/e7a29c42dccb1d6719cc12dce1a76d82/transformed/espresso-idling-resource-3.2.0-api.jar:/Users/yanshouwang/.gradle/caches/transforms-3/710e1455e95e2888b47aff15416dd829/transformed/jetified-javawriter-2.1.1.jar:/Users/yanshouwang/.gradle/caches/transforms-3/e79c0b741d0344260a97e254ac01c1bc/transformed/jetified-javax.inject-1.jar:/Users/yanshouwang/.gradle/caches/transforms-3/8cb67e97b810c6d5f0de6b5f29c3974e/transformed/jetified-jsr305-3.0.2.jar:/Users/yanshouwang/dev/camerax/camerax_android/example/build/app/tmp/kotlin-classes/release" android.app.Activity android.content.Context android.content.ContentResolver android.content.ContentValues android.database.Cursor android.net.Uri android.provider.MediaStore androidx.core.content.ContextCompat androidx.camera.core.CameraSelector androidx.camera.core.ImageAnalysis androidx.camera.core.ImageCapture androidx.camera.core.ImageProxy androidx.camera.core.TorchState androidx.camera.core.ZoomState androidx.camera.view.CameraController androidx.camera.view.LifecycleCameraController androidx.camera.view.PreviewView androidx.camera.mlkit.vision.MlKitAnalyzer androidx.lifecycle.LifecycleOwner androidx.lifecycle.LiveData androidx.lifecycle.Observer com.google.common.util.concurrent.ListenableFuture java.lang.Runnable java.util.concurrent.Executor java.util.concurrent.Executors java.util.concurrent.Future dev.hebei.camerax_android.OnImageCapturedCallback dev.hebei.camerax_android.OnImageCapturedCallbackImpl dev.hebei.camerax_android.PreviewViewFactory
(jnigen) INFO: Parsing inputs took 842 ms
Unhandled exception:
type 'Null' is not a subtype of type 'String' in type cast
#0      _$ParamFromJson (package:jnigen/src/elements/elements.g.dart:134:26)
#1      new Param.fromJson (package:jnigen/src/elements/elements.dart:533:56)
#2      _$MethodFromJson.<anonymous closure> (package:jnigen/src/elements/elements.g.dart:119:34)
#3      MappedListIterable.elementAt (dart:_internal/iterable.dart:425:31)
#4      ListIterator.moveNext (dart:_internal/iterable.dart:354:26)
#5      new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:189:27)
#6      new _GrowableList.of (dart:core-patch/growable_array.dart:150:28)
#7      new List.of (dart:core-patch/array_patch.dart:39:18)
#8      ListIterable.toList (dart:_internal/iterable.dart:224:7)
#9      _$MethodFromJson (package:jnigen/src/elements/elements.g.dart:120:16)
#10     new Method.fromJson (package:jnigen/src/elements/elements.dart:507:57)
#11     _$ClassDeclFromJson.<anonymous closure> (package:jnigen/src/elements/elements.g.dart:28:35)
#12     MappedListIterable.elementAt (dart:_internal/iterable.dart:425:31)
#13     ListIterator.moveNext (dart:_internal/iterable.dart:354:26)
#14     new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:189:27)
#15     new _GrowableList.of (dart:core-patch/growable_array.dart:150:28)
#16     new List.of (dart:core-patch/array_patch.dart:39:18)
#17     ListIterable.toList (dart:_internal/iterable.dart:224:7)
#18     _$ClassDeclFromJson (package:jnigen/src/elements/elements.g.dart:29:16)
#19     new ClassDecl.fromJson (package:jnigen/src/elements/elements.dart:156:7)
#20     new Classes.fromJson (package:jnigen/src/elements/elements.dart:43:35)
#21     getSummary (package:jnigen/src/summary/summary.dart:192:27)
<asynchronous suspension>
#22     generateJniBindings (package:jnigen/src/generate_bindings.dart:31:15)
<asynchronous suspension>
#23     main (file:///Users/yanshouwang/.pub-cache/hosted/pub.dev/jnigen-0.10.0/bin/jnigen.dart:18:3)
<asynchronous suspension>
HosseinYousefi commented 1 month ago

It seems that a method parameter's name is null. This might be the result of some Kotlin compilation.

Can you tell me which libraries you're trying to generate bindings for? To help me more, try to find the culprit by commenting out the classes until the error goes away (If you have too many classes you can try bisection)

yanshouwang commented 1 month ago

It seems that a method parameter's name is null. This might be the result of some Kotlin compilation.

Can you tell me which libraries you're trying to generate bindings for? To help me more, try to find the culprit by commenting out the classes until the error goes away (If you have too many classes you can try bisection)

OK, here is the jnigen.yml, I can generate successfully after I comment this three classes.

These classes can be generated before I upgrade the camerax version from 1.3.4 to 1.4.0-beta02

# Run with `dart run jnigen --config jnigen.yaml`.
android_sdk_config:
  add_gradle_deps: true
  android_example: example/
suspend_fun_to_async: true
enable_experiment:
  - interface_implementation
output:
  dart:
    path: lib/src/jni.g.dart
    structure: single_file
log_level: all
class_path:
  - classes/jetified-listenablefuture-1.0.jar
classes:
  - android.app.Activity
  - android.content.Context
  - android.content.ContentResolver
  - android.content.ContentValues
  - android.database.Cursor
  - android.net.Uri
  - android.provider.MediaStore
  - androidx.core.content.ContextCompat
  - androidx.camera.core.CameraSelector
  # - androidx.camera.core.ImageAnalysis
  # - androidx.camera.core.ImageCapture
  - androidx.camera.core.ImageProxy
  - androidx.camera.core.TorchState
  - androidx.camera.core.ZoomState
  - androidx.camera.view.CameraController
  - androidx.camera.view.LifecycleCameraController
  # - androidx.camera.view.PreviewView
  - androidx.camera.mlkit.vision.MlKitAnalyzer
  - androidx.lifecycle.LifecycleOwner
  - androidx.lifecycle.LiveData
  - androidx.lifecycle.Observer
  - com.google.common.util.concurrent.ListenableFuture
  - java.lang.Runnable
  - java.util.concurrent.Executor
  - java.util.concurrent.Executors
  - java.util.concurrent.Future
  - dev.hebei.camerax_android.OnImageCapturedCallback
  - dev.hebei.camerax_android.OnImageCapturedCallbackImpl
  - dev.hebei.camerax_android.PreviewViewFactory
yanshouwang commented 1 month ago

In the PreviewView class, these methods are added in 1.4.0-beta02.