Omk*_*ala 5 permissions flutter
我正在使用permission_handler包来请求我的应用程序中存储的读取权限,在调试模式下一切都工作正常,当我使用“flutter run --release”运行我的代码时,但是当我将代码导出为apk时,问题就出现了不出现权限对话框。我不知道我在这里做错了什么,请帮助我!
这是 androidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
包=“com.edithautotech.edithdisplayrelease”>
<!-- io.flutter.app.FlutterApplication 是一个 android.app.Application
调用 FlutterMain.startInitialization(this); 在它的 onCreate 方法中。
在大多数情况下,您可以保持原样,但如果您想提供
附加功能可以子类化或重新实现
FlutterApplication 并将您的自定义类放在这里。-->
<!-- “存储”组的权限选项-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<应用
android:name="io.flutter.app.FlutterApplication"
android:label="编辑显示"
android:icon="@mipmap/ic_launcher">
<活动
android:name=".MainActivity"
android:launchMode="singleTop"
android:主题=“@style/LaunchTheme”
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|密度|uiMode"
机器人:硬件加速=“真”
android:windowSoftInputMode="调整调整大小">
<!-- 指定一个 Android 主题,一旦
Android 进程已启动。该主题对用户可见
Flutter UI 初始化时。之后这个主题继续
确定 Flutter UI 后面的窗口背景。-->
<元数据
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<!-- 显示继续显示启动屏幕的 Android 视图
可绘制,直到 Flutter 绘制其第一帧,然后是这个splash
屏幕淡出。启动画面有助于避免任何视觉效果
Android 启动屏幕末尾与绘制之间的间隙
Flutter 的第一帧。-->
<元数据
android:name="io.flutter.embedding.android.SplashScreenDrawable"
android:resource="@drawable/launch_background"
/>
<意图过滤器>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</意图过滤器>
</活动>
<!-- 不要删除下面的元数据。
Flutter工具使用它来生成GeneratePluginRegistrant.java -->
<元数据
android:name="flutterEmbedding"
安卓:值=“2”/>
</应用程序>
</清单>
这是飞镖代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.edithautotech.edithdisplayrelease">
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<!-- Permissions options for the 'storage' group-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:name="io.flutter.app.FlutterApplication"
android:label="Edith Display"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<!-- Displays an Android View that continues showing the launch screen
Drawable until Flutter paints its first frame, then this splash
screen fades out. A splash screen is useful to avoid any visual
gap between the end of Android's launch screen and the painting of
Flutter's first frame. -->
<meta-data
android:name="io.flutter.embedding.android.SplashScreenDrawable"
android:resource="@drawable/launch_background"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>
我很确定我已经解决了这个问题:/sf/answers/4496515131/
我用几种不同的方法解决了这个问题:
#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
-keep class androidx.lifecycle.** { *; } #https://github.com/flutter/flutter/issues/58479
#https://medium.com/@swav.kulinski/flutter-and-android-obfuscation-8768ac544421
Run Code Online (Sandbox Code Playgroud)
buildTypes {
release {
profile {
matchingFallbacks = ['debug', 'release']
}
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
lintOptions {
disable 'InvalidPackage'
checkReleaseBuilds false
}
Run Code Online (Sandbox Code Playgroud)
flutter channel master
Run Code Online (Sandbox Code Playgroud)
我还通过导航到 SDK 管理器 -> SDK 工具 -> 检查和下载 Google Play 服务,将 android 迁移到了 Android Studio 中的 AndroidX
我还确保编译SDK和目标SDK是29;目前,SDK 30 的permission_handler 包存在问题。
我还编辑了 kotlin 主要活动文件:
package yourpackage
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5407 次 |
| 最近记录: |