Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cannot build in Flutter 3.29.0. error "FlutterInappPurchasePlugin.kt:10:48 Unresolved reference: Registrar" #500

Open
hatano0x06 opened this issue Feb 18, 2025 · 2 comments

Comments

@hatano0x06
Copy link

hatano0x06 commented Feb 18, 2025

Version of flutter_inapp_purchase
flutter_inapp_purchase: ^5.6.1

Platforms you faced the error (IOS or Android or both?)
Android

Actual behavior

e: file:///C:/Users/81708/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_inapp_purchase-5.6.1/android/src/main/kotlin/com/dooboolab/flutterinapppurchase/FlutterInappPurchasePlugin.kt:10:48 Unresolved reference: Registrar
e: file:///C:/Users/81708/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_inapp_purchase-5.6.1/android/src/main/kotlin/com/dooboolab/flutterinapppurchase/FlutterInappPurchasePlugin.kt:100:37 Unresolved reference: Registrar

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':flutter_inapp_purchase:compileReleaseKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction
   > Compilation error. See log for more details

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

flutter doctor -v

[√] Flutter (Channel stable, 3.29.0, on Microsoft Windows [Version 10.0.26100.3194], locale ja-JP) [653ms]
    • Flutter version 3.29.0 on channel stable at C:\Users\81708\Desktop\develop\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 35c388afb5 (8 days ago), 2025-02-10 12:48:41 -0800
    • Engine revision f73bfc4522
    • Dart version 3.7.0
    • DevTools version 2.42.2

[√] Windows Version (11 Pro 64-bit, 24H2, 2009) [3.1s]

[√] Android toolchain - develop for Android devices (Android SDK version 34.0.0) [7.9s]
    • Android SDK at C:\Users\81708\AppData\Local\Android\sdk
    • Platform android-35, build-tools 34.0.0
    • Java binary at: C:\Program Files\Android\Android Studio3\jbr\bin\java
      This is the JDK bundled with the latest Android Studio installation on this machine.
      To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
    • Java version OpenJDK Runtime Environment (build 21.0.3+-12282718-b509.11)
    • All Android licenses accepted.

[√] Chrome - develop for the web [329ms]
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[!] Visual Studio - develop Windows apps (Visual Studio Build Tools 2022 17.13.0) [328ms]
    • Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools
    • Visual Studio Build Tools 2022 version 17.13.35806.99
    X Visual Studio is missing necessary components. Please re-run the Visual Studio installer for the "Desktop
      development with C++" workload, and include these components:
        MSVC v142 - VS 2019 C++ x64/x86 build tools
         - If there are multiple build tool versions available, install the latest
        C++ CMake tools for Windows
        Windows 10 SDK

[!] Android Studio (version 2021.3) [24ms]
    • Android Studio at C:\Program Files\Android\Android Studio1
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    X Unable to determine bundled Java version.
    • Try updating or re-installing Android Studio.

[!] Android Studio (version 2024.1) [22ms]
    • Android Studio at C:\Program Files\Android\Android Studio2
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    X Unable to determine bundled Java version.
    • Try updating or re-installing Android Studio.

[√] Android Studio (version 2024.2) [21ms]
    • Android Studio at C:\Program Files\Android\Android Studio3
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 21.0.3+-12282718-b509.11)

[√] VS Code (version 1.97.2) [21ms]
    • VS Code at C:\Users\81708\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.104.0

[√] Connected device (4 available) [399ms]
    • Android SDK built for x86 (mobile) • emulator-5554 • android-x86    • Android 11 (API 30) (emulator)
    • Windows (desktop)                  • windows       • windows-x64    • Microsoft Windows [Version 10.0.26100.3194]
    • Chrome (web)                       • chrome        • web-javascript • Google Chrome 132.0.6834.197
    • Edge (web)                         • edge          • web-javascript • Microsoft Edge 133.0.3065.69

[√] Network resources [443ms]
    • All expected network resources are available.

! Doctor found issues in 3 categories.
@willicom2000
Copy link

This plugin doesn´t work any more with the latest version of flutter. I rewrite the code, becouse migrate to other plugins will be more complicated. Change this, and the issue will finish:

Replace the content of FlutterInappPurchasePlugin with this:

package com.dooboolab.flutterinapppurchase

import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.embedding.engine.plugins.activity.ActivityAware
import android.content.Context
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.embedding.engine.plugins.FlutterPlugin.FlutterPluginBinding
import io.flutter.plugin.common.BinaryMessenger
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
//import io.flutter.plugin.common.PluginRegistry.Registrar
import android.content.pm.PackageManager.NameNotFoundException
import io.flutter.plugin.common.MethodCall

/** FlutterInappPurchasePlugin */
class FlutterInappPurchasePlugin : FlutterPlugin, ActivityAware, MethodCallHandler {
private var androidInappPurchasePlugin: AndroidInappPurchasePlugin? = null
private var amazonInappPurchasePlugin: AmazonInappPurchasePlugin? = null
private var channel: MethodChannel? = null
private lateinit var messenger: BinaryMessenger
//var context: Context? = null
private lateinit var context: Context

override fun onAttachedToEngine(flutterPluginBinding: FlutterPluginBinding) {
    context     = flutterPluginBinding.applicationContext
    messenger   = flutterPluginBinding.binaryMessenger //ADD FOR LISTENER
    isAndroid   = isPackageInstalled(context, "com.android.vending")
    isAmazon    = isPackageInstalled(context, "com.amazon.venezia")

    // In the case of an amazon device which has been side loaded with the Google Play store,
    // we should use the store the app was installed from.
    if (isAmazon && isAndroid) {
        if (isAppInstalledFrom(context, "amazon")) {
            isAndroid = false
        } else {
            isAmazon = false
        }
    }
    channel = MethodChannel(messenger!!, "flutter_inapp")
    if (isAndroid) {
        androidInappPurchasePlugin = AndroidInappPurchasePlugin()
        androidInappPurchasePlugin!!.setContext(context)
        androidInappPurchasePlugin!!.setChannel(channel)
        channel!!.setMethodCallHandler(androidInappPurchasePlugin)
    } else if (isAmazon) {
        amazonInappPurchasePlugin = AmazonInappPurchasePlugin()
        amazonInappPurchasePlugin!!.setContext(context)
        amazonInappPurchasePlugin!!.setChannel(channel)
        channel!!.setMethodCallHandler(amazonInappPurchasePlugin)
    }
}

override fun onDetachedFromEngine(binding: FlutterPluginBinding) {
    channel!!.setMethodCallHandler(null)
    channel = null
    if (isAndroid) {
        androidInappPurchasePlugin!!.setChannel(null)
    } else if (isAmazon) {
        amazonInappPurchasePlugin!!.setChannel(null)
    }
}

override fun onAttachedToActivity(binding: ActivityPluginBinding) {
    if (isAndroid) {
        androidInappPurchasePlugin!!.setActivity(binding.activity)
    } else if (isAmazon) {
        amazonInappPurchasePlugin!!.setActivity(binding.activity)
    }
}

override fun onDetachedFromActivity() {
    if (isAndroid) {
        androidInappPurchasePlugin!!.setActivity(null)
        androidInappPurchasePlugin!!.onDetachedFromActivity()
    } else if (isAmazon) {
        amazonInappPurchasePlugin!!.setActivity(null)
    }
}

override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
    onAttachedToActivity(binding)
}

override fun onDetachedFromActivityForConfigChanges() {
    onDetachedFromActivity()
}

private fun setAndroidInappPurchasePlugin(androidInappPurchasePlugin: AndroidInappPurchasePlugin) {
    this.androidInappPurchasePlugin = androidInappPurchasePlugin
}

private fun setAmazonInappPurchasePlugin(amazonInappPurchasePlugin: AmazonInappPurchasePlugin) {
    this.amazonInappPurchasePlugin = amazonInappPurchasePlugin
}

companion object {
    private var isAndroid = false
    private var isAmazon = false

    fun getStore(): String {
       return if (!isAndroid && !isAmazon) "none" else if (isAndroid) "play_store" else "amazon"
    }

    /*fun registerWith(registrar: Registrar) {
        val instance = FlutterInappPurchasePlugin()
        instance.onAttached(registrar.context(), registrar.messenger())
    }*/

    private fun isPackageInstalled(ctx: Context, packageName: String): Boolean {
        return try {
            ctx.packageManager.getPackageInfo(packageName, 0)
            true
        } catch (e: NameNotFoundException) {
            false
        }
    }

    fun isAppInstalledFrom(ctx: Context, installer: String?): Boolean {
        val installerPackageName = ctx.packageManager.getInstallerPackageName(ctx.packageName)
        return installer != null && installerPackageName != null && installerPackageName.contains(
            installer
        )
    }
}

override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
    // NO NEED TO BE IMPLEMENTED...
    TODO("Not yet implemented")
}

}

@moodstubos
Copy link

This is the fix: #497

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants