欢迎您光临深圳塔灯网络科技有限公司!
电话图标 余先生:13699882642

网站百科

为您解码网站建设的点点滴滴

flutter 结构改动

发表日期:2018-12 文章编辑:小灯 浏览次数:2022

为什么要改结构?

比如我写了一个阿里支付的 plugin ,其默认结构应该是这样的

xxxLib --android //android 的代码 --ios //ios 的代码,这个里面我没有实现 --lib //flutter 的代码 

flutter 的工程想使用当然没问题,

那要是android 工程想引用呢?仅当做android 工程的一个lib?

因为这个lib 依赖 flutter.jar 所以要加入,要不然无法单独编译

apply plugin: 'com.android.library' def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } def flutterRoot = localProperties.getProperty('flutter.sdk') if(flutterRoot!=null) { project.dependencies { if (project.getConfigurations().findByName("compileOnly")) { compileOnly project.files("$flutterRoot/bin/cache/artifacts/engine/android-arm/flutter.jar") } else { compile project.files("$flutterRoot/bin/cache/artifacts/engine/android-arm/flutter.jar") } } } 

并且要在 local.properties 加入

flutter.sdk=/Users/mac/Library/flutter flutter.versionName= xxx flutter.versionCode= xxx flutter.buildMode=debug 

那么要传到远程仓库上怎么办呢?远程仓库没flutter 环境怎么编译出产物

1.把jar包放进去
2.把flutter的相关代码去了

于是成了下面这样

if (rootProject.getExtensions().findByName(getName())==null){ ext.set("moduleType",Type.isModule.name()) }else{ ext.set("moduleType",rootProject.getExtensions().getByName(getName())) } enum Type{ isAPP, //app运行 isModule, //android lib 库 isFlutterPlugin; //flutterplugins } if (moduleType == Type.isAPP.name()){ apply plugin: 'com.android.application' }else { apply plugin: 'com.android.library' if (moduleType == Type.isFlutterPlugin.name()) { def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } def flutterRoot = localProperties.getProperty('flutter.sdk') if(flutterRoot!=null) { project.dependencies { if (project.getConfigurations().findByName("compileOnly")) { compileOnly project.files("$flutterRoot/bin/cache/artifacts/engine/android-arm/flutter.jar") } else { compile project.files("$flutterRoot/bin/cache/artifacts/engine/android-arm/flutter.jar") } } } } }sourceSets { main { if(moduleType == Type.isAPP.name()){ manifest.srcFile 'src/module/AndroidManifest.xml' //特别注意这里manifest 的大小写 不是 Manifest java.srcDirs = [ 'src/main/java', 'src/module/java' ] res.srcDirs = [ 'src/main/res', 'src/module/res' ] }else if(moduleType == Type.isFlutterPlugin.name()){ java.srcDirs = [ 'src/main/java', 'src/flutter/java' ] } } } 

然后在 工程下的build.gradle中可以用不同的方式

//这里可以改为不同的编译方式 rootProject.extensions.add("ali_pay",Type.isFlutterPlugin.name())enum Type{ isAPP, //app运行 isModule, //android lib 库 isFlutterPlugin; //flutterplugins } 

目录结构如下


QQ20181201-124355@2x.png

flutter 工程引用要做些什么改动?

0.pubspec.yaml 里加 plugins 照旧 比如

ali_pay: path: ../../github/ali_pay/ali_pay/src/flutter 

1.flutter 工程里的android里的 build.gradle 加入

 //这里可以改为不同的编译方式 rootProject.extensions.add("ali_pay",Type.isFlutterPlugin.name()) enum Type{ isAPP, //app运行 isModule, //android lib 库 isFlutterPlugin; //flutterplugins } 

2.flutter 工程里的android里的 settings.gradle 改为

def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()def plugins = new Properties() def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') if (pluginsFile.exists()) { pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } }plugins.each { name, path -> def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() if(!pluginDirectory.exists()){ pluginDirectory = flutterProjectRoot.resolve(path).getParent().getParent().toFile() } if(pluginDirectory.exists()){ include ":$name" project(":$name").projectDir = pluginDirectory } } 

这样结构就被改动了,如果要用ios 的话不要这么改

ali_pay 的链接


本页内容由塔灯网络科技有限公司通过网络收集编辑所得,所有资料仅供用户学习参考,本站不拥有所有权,如您认为本网页中由涉嫌抄袭的内容,请及时与我们联系,并提供相关证据,工作人员会在5工作日内联系您,一经查实,本站立刻删除侵权内容。本文链接:http://dengtar.com/17662.html
相关APP开发
 八年  行业经验

多一份参考,总有益处

联系深圳网站公司塔灯网络,免费获得网站建设方案及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:余经理:13699882642

Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.