flutter 生成aar文件,嵌入原生android项目

摘要:
添加以下模块StringstorageUrl=System。环境。FLUTTER到项目根目录app/build。渐变文件_ STORAGE_ BASE_ URL?//存储谷歌api。com”存储库{maven{url}可以编写您自己的颤振项目的绝对路径,例如:

适用于flutter单独开发,android项目单独开发的场景

1:将flutter项目打包成aar文件,详情见官方文档:https://flutter.cn/docs/development/add-to-app/android/add-flutter-screen

2:在原生android项目文件中,项目根目录app/build.gradle文件中添加以下模块

String storageUrl = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com"
repositories {
    maven {
        url '可以写自己flutter项目的绝对路径比如:d:\flutter_pro\build\host\outputs\repo'
    }
    maven {
        url 'http://download.flutter.io'
    }
}

3:同样在项目根目录app/build.gradle文件中的 dependencies 模块添加以下代码

debugImplementation 'com.example.flutter项目名称:flutter_debug:1.0'
    profileImplementation 'com.example.flutter项目名称:flutter_profile:1.0'
    releaseImplementation 'com.example.flutter项目名称:flutter_release:1.0'

4:同样在项目根目录app/build.gradle文件中的  android/buildTypes 添加以下代码

    profile {
            initWith debug
        }

 ps:

1-4步在flutter生成aar文件完毕后,会在控制台打印出以上配置信息,请留意

5:在项目根目录app/src/main/AndroidManifest.xml中添加以下代码到 application 模块里

 <activity
            android:name="io.flutter.embedding.android.FlutterActivity"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize"
            />

6:让项目自动下载依赖包

7:在android项目中想使用flutter的文件中引入包

import io.flutter.embedding.android.FlutterActivity;

8:调用flutter页面代码,调用逻辑按自己项目需求来

startActivity(
                FlutterActivity
                        .withNewEngine()
                        .initialRoute("自己flutter项目的页面路由如:/main")
//设置成"/",如果设置成/main,不是flutter页面的根路由,则点击物理返回按键的时候会出现先返回根路由然后返回android界面的bug .build(this) );

ps:

编译报错:在第5步中的 android:theme="@style/LaunchTheme" 出错

在src/main/res/values文件夹添加styles.xml ,内容如下

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <!-- Show a splash screen on the activity. Automatically removed when
             Flutter draws its first frame -->
        <item name="android:windowFullscreen">true</item>
    </style>
</resources>

继续编译,报错,Cannot fit requested classes in a single dex file

网上搜索原因是:

原因:项目貌似有点大,已经超过65k个方法。一个dex已经装不下了,需要个多个dex,也就是multidex ,因为Android系统定义总方法数是一个short int,short int 最大值为65536。

一脸懵逼,明明自己是写的个原生android  demo项目,整个页面就一个按钮

按照提示

在 app 的 build.gradle 文件中(原文地址:https://blog.csdn.net/MRYZJ/article/details/103463212)

android {
    defaultConfig {
            ···
        // 这里添加
        multiDexEnabled true
    }
}

dependencies {
    // 引入support支持库的multidex库
    implementation 'com.android.support:multidex:1.0.3'
    //或androidx支持库的multidex库
    implementation 'androidx.multidex:multidex:2.0.1'
}

运行,成功,点击按钮能正常出现flutter页面,但是中间会有一段黑屏时间,稍后解决,至少项目能够正常运行了

ps:
黑屏解决方案,网上很多,大概思路就是将主题设置为白色或者透明即可
代码可以修改为(将页面先初始化,调用的时候直接使用即可):
Intent demo;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        demo = FlutterActivity
                .withNewEngine()
                .initialRoute("/main")
                .build(this);
    }

    public void getflutter(View view) {
        if(null == demo){
            Toast.makeText(this, "未找到flutter页面", Toast.LENGTH_SHORT).show();
        }else {
            startActivity(demo);
        }
    }


免责声明:文章转载自《flutter 生成aar文件,嵌入原生android项目》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇字符串的截取Python+OpenCV图像处理之图像直方图下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何调用部署在SSL下的Web Services

java:In my recent experience, this error appears when there is a problem with the trustStore or trustStorePassword. Make sure you have separate keyStore and trustStore files that...

Webservice返回json数据格式

问题: 我将结果内容用字符串拼接成Json数据并返回的时候,会在结果前面添加xml头部,结果如下。 [plain] view plaincopy <span ><string xmlns="http://tempuri.org/">   {"data":[{"batchId":"B001","produceOrderId":...

注解-组件注册02-@ComponentScan

  当需要扫描一个包下的所有注解时,可以在XML文件中进行配置: <!--包扫描,只要标注了@Controller、@Service、@Reposotory、@Component就可以被加载到spring bean容器--> <context:component-scan base-package="spring_annotation....

App的基本结构

今天主要学习安装了Android Studio,并且成功地在虚拟机上运行了HelloWord工程。下面针对HelloWord工程对app的基本框架结构进行一个总结。掌握app的基本结构对初学软件开发的人是很重要的,搞明白它对于后期开发项目有很大帮助。 以下是HelloWord项目的相关截图:  一个完整的项目分两个子目录,分别是app和Gradle Sc...

Android Visibility控件显示和隐藏

Android控件显示和隐藏 visibility   可见(visible) XML文件:android:visibility="visible" Java代码:view.setVisibility(View.VISIBLE); 不可见(invisible) XML文件:android:visibility="invisible" Java代码:vie...

VM安装安卓虚拟机

使用VM安装安卓虚拟机 配置过程 参考链接:VMware实现Android_x86——8.1从安装到使用 具体的工具都可以从 盘点网 下载使用。 VMWARE虚拟机如何打开.VMDK格式的磁盘映像 Android x86开源项目最新版虚拟机镜像下载VM/Vbox 虚拟机里玩谷歌原生版安卓系统...