diff --git a/packages/package_info_plus/package_info_plus/CHANGELOG.md b/packages/package_info_plus/package_info_plus/CHANGELOG.md index ab94e12717..ed394f384c 100644 --- a/packages/package_info_plus/package_info_plus/CHANGELOG.md +++ b/packages/package_info_plus/package_info_plus/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.3.0 + +- Removed deprecated embeddingV1 function +- Upgraded gradle and Android API version + ## 1.2.1 - Windows: Annotate int with external in preparation of Flutter 2.5 diff --git a/packages/package_info_plus/package_info_plus/android/build.gradle b/packages/package_info_plus/package_info_plus/android/build.gradle index 46e1ca5f4b..632f51b5c0 100644 --- a/packages/package_info_plus/package_info_plus/android/build.gradle +++ b/packages/package_info_plus/package_info_plus/android/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:7.0.2' } } @@ -22,7 +22,7 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 28 + compileSdkVersion 31 defaultConfig { minSdkVersion 16 diff --git a/packages/package_info_plus/package_info_plus/android/src/main/AndroidManifest.xml b/packages/package_info_plus/package_info_plus/android/src/main/AndroidManifest.xml index 96f347ed64..8b327e5486 100644 --- a/packages/package_info_plus/package_info_plus/android/src/main/AndroidManifest.xml +++ b/packages/package_info_plus/package_info_plus/android/src/main/AndroidManifest.xml @@ -1,3 +1,2 @@ - + diff --git a/packages/package_info_plus/package_info_plus/android/src/main/java/dev/fluttercommunity/plus/packageinfo/PackageInfoPlugin.java b/packages/package_info_plus/package_info_plus/android/src/main/java/dev/fluttercommunity/plus/packageinfo/PackageInfoPlugin.java index 646193dee5..317f363340 100644 --- a/packages/package_info_plus/package_info_plus/android/src/main/java/dev/fluttercommunity/plus/packageinfo/PackageInfoPlugin.java +++ b/packages/package_info_plus/package_info_plus/android/src/main/java/dev/fluttercommunity/plus/packageinfo/PackageInfoPlugin.java @@ -4,17 +4,17 @@ package dev.fluttercommunity.plus.packageinfo; +import android.annotation.SuppressLint; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; +import androidx.annotation.NonNull; import io.flutter.embedding.engine.plugins.FlutterPlugin; -import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; -import io.flutter.plugin.common.PluginRegistry.Registrar; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.HashMap; @@ -25,43 +25,45 @@ public class PackageInfoPlugin implements MethodCallHandler, FlutterPlugin { private Context applicationContext; private MethodChannel methodChannel; - /** Plugin registration. */ - public static void registerWith(Registrar registrar) { - final PackageInfoPlugin instance = new PackageInfoPlugin(); - instance.onAttachedToEngine(registrar.context(), registrar.messenger()); + @SuppressWarnings("deprecation") + private static long getLongVersionCode(PackageInfo info) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + return info.getLongVersionCode(); + } + return info.versionCode; } + /** Plugin registration. */ @Override public void onAttachedToEngine(FlutterPluginBinding binding) { - onAttachedToEngine(binding.getApplicationContext(), binding.getBinaryMessenger()); - } - - private void onAttachedToEngine(Context applicationContext, BinaryMessenger messenger) { - this.applicationContext = applicationContext; - methodChannel = new MethodChannel(messenger, "dev.fluttercommunity.plus/package_info"); + this.applicationContext = binding.getApplicationContext(); + methodChannel = + new MethodChannel(binding.getBinaryMessenger(), "dev.fluttercommunity.plus/package_info"); methodChannel.setMethodCallHandler(this); } @Override - public void onDetachedFromEngine(FlutterPluginBinding binding) { + public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { applicationContext = null; methodChannel.setMethodCallHandler(null); methodChannel = null; } @Override - public void onMethodCall(MethodCall call, Result result) { + public void onMethodCall(MethodCall call, @NonNull Result result) { try { if (call.method.equals("getAll")) { PackageManager pm = applicationContext.getPackageManager(); PackageInfo info = pm.getPackageInfo(applicationContext.getPackageName(), 0); + String buildSignature = getBuildSignature(pm); + Map map = new HashMap<>(); map.put("appName", info.applicationInfo.loadLabel(pm).toString()); map.put("packageName", applicationContext.getPackageName()); map.put("version", info.versionName); map.put("buildNumber", String.valueOf(getLongVersionCode(info))); - map.put("buildSignature", getBuildSignature(pm)); + if (buildSignature != null) map.put("buildSignature", buildSignature); result.success(map); } else { @@ -73,24 +75,33 @@ public void onMethodCall(MethodCall call, Result result) { } @SuppressWarnings("deprecation") - private static long getLongVersionCode(PackageInfo info) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - return info.getLongVersionCode(); - } - return info.versionCode; - } - private String getBuildSignature(PackageManager pm) { try { - PackageInfo packageInfo = - pm.getPackageInfo(applicationContext.getPackageName(), PackageManager.GET_SIGNATURES); - if (packageInfo == null - || packageInfo.signatures == null - || packageInfo.signatures.length == 0 - || packageInfo.signatures[0] == null) { - return null; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + PackageInfo packageInfo = + pm.getPackageInfo( + applicationContext.getPackageName(), PackageManager.GET_SIGNING_CERTIFICATES); + if (packageInfo == null || packageInfo.signingInfo == null) { + return null; + } + if (packageInfo.signingInfo.hasMultipleSigners()) { + return signatureToSha1(packageInfo.signingInfo.getApkContentsSigners()[0].toByteArray()); + } else { + return signatureToSha1( + packageInfo.signingInfo.getSigningCertificateHistory()[0].toByteArray()); + } + } else { + @SuppressLint("PackageManagerGetSignatures") + PackageInfo packageInfo = + pm.getPackageInfo(applicationContext.getPackageName(), PackageManager.GET_SIGNATURES); + if (packageInfo == null + || packageInfo.signatures == null + || packageInfo.signatures.length == 0 + || packageInfo.signatures[0] == null) { + return null; + } + return signatureToSha1(packageInfo.signatures[0].toByteArray()); } - return signatureToSha1(packageInfo.signatures[0].toByteArray()); } catch (PackageManager.NameNotFoundException | NoSuchAlgorithmException e) { return null; } diff --git a/packages/package_info_plus/package_info_plus/example/android/app/build.gradle b/packages/package_info_plus/package_info_plus/example/android/app/build.gradle index c24eba0fe8..5e2b673e3a 100644 --- a/packages/package_info_plus/package_info_plus/example/android/app/build.gradle +++ b/packages/package_info_plus/package_info_plus/example/android/app/build.gradle @@ -25,7 +25,7 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 28 + compileSdkVersion 31 lintOptions { disable 'InvalidPackage' @@ -34,7 +34,7 @@ android { defaultConfig { applicationId "io.flutter.plugins.packageinfoexample" minSdkVersion 16 - targetSdkVersion 28 + targetSdkVersion 31 versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -53,7 +53,7 @@ flutter { } dependencies { - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test:runner:1.4.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' } diff --git a/packages/package_info_plus/package_info_plus/example/android/app/src/main/AndroidManifest.xml b/packages/package_info_plus/package_info_plus/example/android/app/src/main/AndroidManifest.xml index e4d033e8d8..091c179ba7 100644 --- a/packages/package_info_plus/package_info_plus/example/android/app/src/main/AndroidManifest.xml +++ b/packages/package_info_plus/package_info_plus/example/android/app/src/main/AndroidManifest.xml @@ -8,18 +8,13 @@ android:theme="@android:style/Theme.Black.NoTitleBar" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection" android:hardwareAccelerated="true" - android:windowSoftInputMode="adjustResize"> + android:windowSoftInputMode="adjustResize" + android:exported="true"> - - diff --git a/packages/package_info_plus/package_info_plus/example/android/app/src/main/java/io/flutter/plugins/packageinfoexample/EmbedderV1Activity.java b/packages/package_info_plus/package_info_plus/example/android/app/src/main/java/io/flutter/plugins/packageinfoexample/EmbedderV1Activity.java deleted file mode 100644 index ccc1f20a71..0000000000 --- a/packages/package_info_plus/package_info_plus/example/android/app/src/main/java/io/flutter/plugins/packageinfoexample/EmbedderV1Activity.java +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package io.flutter.plugins.packageinfoexample; - -import android.os.Bundle; -import dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin; -import io.flutter.app.FlutterActivity; - -public class EmbedderV1Activity extends FlutterActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - PackageInfoPlugin.registerWith( - registrarFor("dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin")); - } -} diff --git a/packages/package_info_plus/package_info_plus/example/android/build.gradle b/packages/package_info_plus/package_info_plus/example/android/build.gradle index 0f61fab3f7..b72cb3c88f 100644 --- a/packages/package_info_plus/package_info_plus/example/android/build.gradle +++ b/packages/package_info_plus/package_info_plus/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:7.0.2' } } diff --git a/packages/package_info_plus/package_info_plus/example/android/gradle.properties b/packages/package_info_plus/package_info_plus/example/android/gradle.properties index 05413bc45d..08f2b5f91b 100644 --- a/packages/package_info_plus/package_info_plus/example/android/gradle.properties +++ b/packages/package_info_plus/package_info_plus/example/android/gradle.properties @@ -1,4 +1,3 @@ org.gradle.jvmargs=-Xmx1536M android.enableJetifier=true -android.enableR8=true android.useAndroidX=true diff --git a/packages/package_info_plus/package_info_plus/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/package_info_plus/package_info_plus/example/android/gradle/wrapper/gradle-wrapper.properties index 01a286e96a..297f2fec36 100644 --- a/packages/package_info_plus/package_info_plus/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/package_info_plus/package_info_plus/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/package_info_plus/package_info_plus/example/android/settings.gradle b/packages/package_info_plus/package_info_plus/example/android/settings.gradle index 115da6cb4f..44e62bcf06 100644 --- a/packages/package_info_plus/package_info_plus/example/android/settings.gradle +++ b/packages/package_info_plus/package_info_plus/example/android/settings.gradle @@ -1,15 +1,11 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withInputStream { stream -> plugins.load(stream) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/packages/package_info_plus/package_info_plus/example/pubspec.yaml b/packages/package_info_plus/package_info_plus/example/pubspec.yaml index ac82744c66..f6cb9f0100 100644 --- a/packages/package_info_plus/package_info_plus/example/pubspec.yaml +++ b/packages/package_info_plus/package_info_plus/example/pubspec.yaml @@ -7,18 +7,17 @@ environment: sdk: '>=2.12.0 <3.0.0' dependencies: + universal_io: ^2.0.4 flutter: sdk: flutter package_info_plus: path: ../ - universal_io: ^1.0.1 dev_dependencies: - flutter_driver: - sdk: flutter integration_test: sdk: flutter - test: any + flutter_driver: + sdk: flutter pedantic: ^1.10.0 flutter: diff --git a/packages/package_info_plus/package_info_plus/example/test_driver/package_info_plus_e2e.dart b/packages/package_info_plus/package_info_plus/example/test_driver/package_info_plus_e2e.dart index cb47c491c4..c7f83b646d 100644 --- a/packages/package_info_plus/package_info_plus/example/test_driver/package_info_plus_e2e.dart +++ b/packages/package_info_plus/package_info_plus/example/test_driver/package_info_plus_e2e.dart @@ -2,8 +2,6 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -// @dart=2.9 - import 'package:flutter/foundation.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; @@ -19,9 +17,9 @@ void main() { // These tests are based on the example app. The tests should be updated if any related info changes. if (Platform.isAndroid) { expect(info.appName, 'package_info_example'); - expect(info.buildNumber, '1'); + expect(info.buildNumber, '4'); expect(info.packageName, 'io.flutter.plugins.packageinfoexample'); - expect(info.version, '1.0'); + expect(info.version, '1.2.3'); } else if (Platform.isIOS) { expect(info.appName, 'Package Info Example'); expect(info.buildNumber, '1'); @@ -52,10 +50,10 @@ void main() { await tester.pumpAndSettle(); if (Platform.isAndroid) { expect(find.text('package_info_example'), findsOneWidget); - expect(find.text('1'), findsOneWidget); + expect(find.text('4'), findsOneWidget); expect( find.text('io.flutter.plugins.packageinfoexample'), findsOneWidget); - expect(find.text('1.0'), findsOneWidget); + expect(find.text('1.2.3'), findsOneWidget); } else if (Platform.isIOS) { expect(find.text('Package Info Example'), findsOneWidget); expect(find.text('1'), findsOneWidget); diff --git a/packages/package_info_plus/package_info_plus/example/test_driver/package_info_plus_e2e_test.dart b/packages/package_info_plus/package_info_plus/example/test_driver/package_info_plus_e2e_test.dart index d9142936ef..c66f62f15c 100644 --- a/packages/package_info_plus/package_info_plus/example/test_driver/package_info_plus_e2e_test.dart +++ b/packages/package_info_plus/package_info_plus/example/test_driver/package_info_plus_e2e_test.dart @@ -2,8 +2,6 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -// @dart=2.9 - import 'dart:convert'; import 'dart:io'; diff --git a/packages/package_info_plus/package_info_plus/pubspec.yaml b/packages/package_info_plus/package_info_plus/pubspec.yaml index 2560fd294f..cf723ac755 100644 --- a/packages/package_info_plus/package_info_plus/pubspec.yaml +++ b/packages/package_info_plus/package_info_plus/pubspec.yaml @@ -1,6 +1,6 @@ name: package_info_plus description: Flutter plugin for querying information about the application package, such as CFBundleVersion on iOS or versionCode on Android. -version: 1.2.1 +version: 1.3.0 homepage: https://plus.fluttercommunity.dev/ repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/