packages思维及使用Java添加Android平台特定实现

目录
  • packages思维
  • 过程实现
  • Android平台代码
  • 创建Flutter平台客户端
  • 使用Java添加Android平台特定的实现

packages思维

即使软件包未在Pub。对于未用于公共发布的特殊插件或尚未准备好发布的软件包,可以使用其他依赖选项:

dependencies:
  flutter:
    sdk: flutter

路径依赖性:Flutter应用程序可以通过文件系统依赖插件的路径依赖性。路径可以是相对路径,也可以是绝对路径。

例如,要依赖位于应用程序相邻目录中的插件“plugin1”,请使用以下语法依赖项:plugin1:path:/plugin1/ Git依赖性:还可以依赖存储在Git存储库中的包。

如果软件包位于仓库的根目录中,请使用以下语法:

dependencies:plugin1:git:url:git://github.com/flutter/plugin1.git

import 'package:flutter/material.dart';
import 'package:css_colors/css_colors.dart';
void main() {
  runApp(new MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new DemoPage(),
    );
  }
}
class DemoPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Container(color: CSSColors.orange)
    );
  }
}

Git依赖于文件夹中的包:默认情况下,Pub假设包位于Git存储库的根目录中。如果不是这样,可以使用path参数指定位置,例如:dependencies:package1:git:url:git://github.com/flutter/packages.git路径:packages/package1 最后,可以使用ref参数来修复对特定gitcommit、分支或标记的依赖关系。 当pubspec.yaml以速记方式添加包时,plugin1:这被解释为plugin1,即可以使用任何版本的包。为了确保包在更新后可以正常使用,我们建议使用以下格式之一指定版本范围:

范围限制:指定最小和最大版本号,例如依赖项:url_launcher:'>=0.1.2<0.2.0' 对范围限制使用插入符号语法:类似于常规范围限制。相关性:集合:“^0.1.2”

import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
void main() {
  runApp(new MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new DemoPage(),
    );
  }
}
class DemoPage extends StatelessWidget {
  launchURL() {
    launch('https://flutter.io');
  }
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Center(
        child: new RaisedButton(
          onPressed: launchURL,
          child: new Text('Show Flutter homepage'),
        ),
      ),
    );
  }
}

过程实现

步骤1:创建包 要创建插件包,请使用--template=plugin参数执行flutter创建 使用--org选项指定的组织并使用反向域名表示法。该值用于生成的Android和iOS代码中的各种包和包标识符。 $flutter创建--org com.example--template=plugin hello 这将在hello/文件夹下创建一个包含以下特殊内容的插件项目: Lib/你好。part:插件包的Dart API Android/src/main/java.com/yourcompany/hello/HelloPlugin.java:插件包API的Android实现

Ios/类/HelloPlugin。m: 插件包API的ios实现 示例/:一个Flutter应用程序,它依赖于插件来解释如何使用它 默认情况下,插件项目对iOS代码使用Objective-C,对Android代码使用Java。如果喜欢Swift或Kotlin,可以使用-i或-a指定iOS或Android的语言。

$ flutter create --template=plugin -i swift -a kotlin hello

Android平台代码

我们建议使用Android Studio编辑Android代码。 在AndroidStudio中编辑Android平台代码之前,首先确保代码至少构建了一次(例如,从IntelliJ运行示例应用程序或在终端上执行cd hello/example;flutter build apk) 下一个

$ flutter packages pub publish --dry-run

启动Android Studio 在“欢迎使用Android Studio”对话框中,选择“导入项目”,或在菜单栏“文件>新建>导入项目…”中,然后选择hello/example/android/build.gradle文件 在“渐变同步”对话框中,选择“确定” 在“Android Gradle插件更新”对话框中,选择“不再介意我参与此项目” 插件的Android平台代码位于hello/java.com中。的公司。hello/HelloPlugin

dependencies:
  url_launcher: ^0.4.2
android {
    // lines skipped
    dependencies {
        provided rootProject.findProject(":url_launcher")
    }
}

如果some_包声明了上述依赖项,other_包声明一个url_启动程序版本类似于“0.4.5”或“^0.4.0”,pub将能够自动解决问题。类似的评论适用于插件包对Gradle模块和Cocoa pods的平台特定依赖性。 即使某些软件包和其他软件包声明了不兼容的urls_Launcher版本,该版本可能仍然是_启动器以兼容的方式工作。可以通过向hello包的pubspec.yaml文件添加依赖重写语句来强制使用特定版本来处理冲突: 在hello/pubspec.yaml中强制使用url版本0.4.3_ Launcher:

dependencies:
  some_package:
  other_package:
dependency_overrides:
  url_launcher: '0.4.3'

如果冲突的依赖项不是一个包,而是一个Android特定的库,如番石榴,那么依赖项重写声明必须添加到Gradle构造逻辑中。

configurations.all {
    resolutionStrategy {
        force 'com.google.guava:guava:23.0-android'
    }
}

创建Flutter平台客户端

应用程序的State类具有当前应用程序状态。我们需要扩展它以保持当前的功率 首先,我们建立渠道。我们使用MethodChannel调用一个方法来返回电池电量。 通道的客户端和主机通过通道构造函数中传递的通道名称进行连接。单个应用程序中使用的所有频道名称必须是唯一的;我们建议在频道名称中添加一个唯一的“域名前缀”,例如samples.flatter.io/pattern。

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
...
class _MyHomePageState extends State<MyHomePage> {
  static const platform = const MethodChannel('samples.flutter.io/battery');
  // Get battery level.
}

接下来,我们调用通道上的方法,指定通过字符串标识符调用方法getBatteryLevel。调用可能失败-例如,如果平台不支持平台API(例如,在模拟器中运行时),我们将invokeMethod调用包装在try-catch语句中。 我们使用返回的结果更新setState中的用户界面状态batteryLevel。

 String _batteryLevel = 'Unknown battery level.';
  Future<Null> _getBatteryLevel() async {
    String batteryLevel;
    try {
      final int result = await platform.invokeMethod('getBatteryLevel');
      batteryLevel = 'Battery level at $result % .';
    } on PlatformException catch (e) {
      batteryLevel = "Failed to get battery level: '${e.message}'.";
    }
    setState(() {
      _batteryLevel = batteryLevel;
    });
  }

使用Java添加Android平台特定的实现

首先在Android Studio中打开Flutter应用程序的Android部分: 启动Android Studio 选择“文件>打开…” 导航到Flutter应用程序目录,选择android文件夹,然后单击“确定” 在java目录中打开MainActivity.java 接下来,在onCreate中创建MethodChannel并设置MethodCallHandler。确保使用与Flutter客户端中使用的频道名称相同的频道名称。

import io.flutter.app.FlutterActivity;
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;
public class MainActivity extends FlutterActivity {
    private static final String CHANNEL = "samples.flutter.io/battery";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
                new MethodCallHandler() {
                    @Override
                    public void onMethodCall(MethodCall call, Result result) {
                        // TODO
                    }
                });
    }
}

最后,我们完成了前面添加的onMethodCall方法。我们需要处理名为getBatteryLevel的平台方法,因此我们检查它是否是调用参数中的getBattery Level。这个平台方法的实现只需要调用我们在上一步中编写的Android代码,并使用响应参数返回成功和错误响应。如果调用了未知方法,我们还将通知返回

以上就是packages思维及使用Java添加Android平台特定实现的详细内容,更多关于packages Java添加Android平台的资料请关注我们其它相关文章!

(0)

相关推荐

  • Android Rxjava3 使用场景详解

    目录 一.Rxjava使用场景 1.多任务嵌套回调 2.多任务合并处理 3.轮询 4.其他小场景 1)倒计时 2)打字机效果 二.结合Rxbinding的使用场景 1.点击事件防抖 2.输入搜索优化 3.联合判断 三.防泄漏 1.Observable.unsubscribeOn 2.disposable.dispose 3.CompositeDisposable 参考了以下文章,表示感谢: 一.Rxjava使用场景 为了模拟实际场景,从wanandroid网站找了二个接口,如下:(对Wanand

  • android studio实现上传图片到java服务器

    本文实例为大家分享了android studio上传图片到java服务器的具体代码,供大家参考,具体内容如下 1.build.gradle配置(增加) dependencies{      implementation 'com.squareup.okhttp3:okhttp:4.9.0'      implementation 'org.conscrypt:conscrypt-android:2.5.1'         } 2.AndroidManifest.xml配置权限 <uses-pe

  • Android Java crash 处理流程详解

    目录 一.背景 二.App端Crash注册 2.1 commonInit() 2.2 KillApplicationHandler 类 2.2.1 ensureLogging() 2.2.2 ApplicationErrorReport 三.AMS端处理崩溃逻辑 3.1 AMS.handleApplicationCrash 3.1.1 AMS.handleApplicationCrashInner() 3.2 addErrorToDropBox() 3.3 AppErrors.crashAppl

  • Android Studio实现简易计算器App (Java语言版)

    本文实例为大家分享了Android Studio实现简易计算器App的具体代码,供大家参考,具体内容如下 效果演示 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical&qu

  • Android性能优化之捕获java crash示例解析

    目录 背景 java层crash由来 为什么java层异常会导致crash 捕获crash 总结 背景 crash一直是影响app稳定性的大头,同时在随着项目逐渐迭代,复杂性越来越提高的同时,由于主观或者客观的的原因,都会造成意想不到的crash出现.同样的,在android的历史化过程中,就算是android系统本身,在迭代中也会存在着隐含的crash.我们常说的crash包括java层(虚拟机层)crash与native层crash,本期我们着重讲一下java层的crash. java层cr

  • Java与Android使用监听者模式示例

    目录 正文 Java代码实例 Android中使用监听器 正文 监听者模式(观察者模式)能降低对象之间耦合程度.为两个相互依赖调用的类进行解耦. 便于进行模块化开发工作.不同模块的开发者可以专注于自身的代码. 监听者用来监听自已感兴趣的事件,当收到自已感兴趣的事件时执行自定义的操作.在某些数据变化时,其他的类做出一些响应.处理数据(或者分发事件)的类主动投送消息,感兴趣的类主动“订阅”消息. 监听者模式在Android中有大量的运用,相信大家都不会感到陌生.在Android开发中,Button控

  • packages思维及使用Java添加Android平台特定实现

    目录 packages思维 过程实现 Android平台代码 创建Flutter平台客户端 使用Java添加Android平台特定的实现 packages思维 即使软件包未在Pub.对于未用于公共发布的特殊插件或尚未准备好发布的软件包,可以使用其他依赖选项: dependencies: flutter: sdk: flutter 路径依赖性:Flutter应用程序可以通过文件系统依赖插件的路径依赖性.路径可以是相对路径,也可以是绝对路径. 例如,要依赖位于应用程序相邻目录中的插件“plugin1

  • C/C++在Java、Android和Objective-C三大平台下实现混合编程

    Android和iOS开发都支持C++开发,可以一套代码多平台使用.同时C++难以反编译的特性也可以为Android开发带来代码的保密,另一native特性也可以提高代码的运行效率. 一.为什么使用C/C++ 便于移植,用C/C++写得库可以方便在其他的平台上再次使用. 代码的保护,由于java层代码很容易被反编译,而C/C++库反汇难度较大. 提高程序的执行效率,将要求高性能的应用逻辑使用C/C++开发,从而提高应用程序的执行效率. 访问现有开源库,需要访问底层的API或引用一些只有C/C++

  • Android平台基于Pull方式对XML文件解析与写入方法详解

    本文详细讲述了Android平台基于Pull方式对XML文件解析与写入方法.分享给大家供大家参考,具体如下: XML技术在跨平台的情况下的数据交互中得到了广泛的应用,假如我们需要开发一个Android应用程序,需要同服务器端进行数据交互,通过XML文件可以很方便的在Android平台和服务器之间进行数据传输,具体实现涉及到对XML文件进行解析及写入的技术.本文实现在Android平台上基于Pull方式对XML文件解析的技术. XmlPullParser是一个Java实现的开源API包(源码下载地

  • Android平台中实现数据存储的5种方式

    本文介绍Android中的5种数据存储方式,具体内容如下 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面将为大家一一详细介绍.  第一种:使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一

  • 快速解决Android平台移植ffmpeg的一些问题

    IT行业是一个踩在巨人肩膀上前进的行业,否则做的事情不一定有意义,所以我也是基于havlenapetr移植的ffmpeg基础上做了些改进,他做的主要贡献有: 1. 移植了ffmpeg并将与媒体相关的结构体在java层重新进行了封装,方便应用程序在java层直接操作ffmpeg API,如各种媒体格式转码及播放,如图1所示 2. 模仿Android的MediaPlayer类实现了ffmpeg的播放接口,如setDataSource(),setDisplay(),start(), stop(),pa

  • Android平台下轻量级http网络传输库

    AsyncHttpHelp是一个android平台下基于httpclient开发的HTTP网络请求工具. 优点 功能齐全,提供常用的http网络访问接口. 轻量级,无任何第三方库依赖,库大小为90K左右. 定制化,自定义json解析库,支持请求参数,返回内容预处理. 易用性,简单易用,只需几行代码即可完成请求,可随意设置cookie.http头部等信息. 功能 1.普通get请求 2.普通post请求 3.Form表单提交数据 4.二进制数据传输 5.json格式内容传输(json字符串自动转j

  • 一款适用于Android平台的俄罗斯方块

    俄罗斯方块Tetris是一款很经典的益智游戏,之前就做了一款桌面版的java俄罗斯方块,这次就尝试着写了一款适用于Android平台的俄罗斯方块. 整个程序设计十分简洁,只是运用了两个类而已,最终做出的效果图如下所示: 首先,要考虑的自然是游戏应该如何布局的问题了.我的想法是将手机屏幕分为上下两部分,上边用来显示游戏者的名称.所得分数以及下一个方块,称为"文字区域",下边自然就是游戏区域了. 如图所示: 布局文件如下: <LinearLayout xmlns:android=&q

  • 解决Android平台中应用程序OOM异常的方法

    在Android平台上面,应用程序OOM异常永远都是值得关注的问题.通常这一块也是程序这中的重点之一.这下我就如何解决OOM作一点简单的介绍. 首先,OOM就是内存溢出,即Out Of Memory.也就是说内存占有量超过了VM所分配的最大. 怎么解决OOM,通常OOM都发生在需要用到大量内存的情况下(创建或解析Bitmap,分配特大的数组等),在这样的一种情况下,就可能出现OOM,据我现在了解到,多数OOM都是因为Bitmap太大.所以,这里我就专门针对如何解决Bitmap的OOM.其实最核发

  • Java微信公众平台之获取地理位置

    本部分需要用到微信的JS-SDK,微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享.扫一扫.卡券.支付等微信特有的能力,为微信用户提供更优质的网页体验. 官方文档 一.JS-SDK引入 1.先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名",和网页授权一样只是个域名. 2

  • Android平台预置GMS包后关机闹钟失效问题及解决方法

    1.介绍 关机闹钟为Android中默认支持的功能,实现起来则需要满足一定的条件:自动开机.开机后响铃.对于自动开机来说,自动关机可以在应用层通过设置alarm来实现,而自动开机需要底层rtc时钟的支持:开机后检查时间,到点响铃. 2.原理 一般智能手机的硬件架构都是分为RF,BB,AP这三个部分, RF射频部分的功能主要是接收和发射射频,大家不用关注这个.而AP部分就是应用程序处理器,其实也就是CPU模块:BB部分则是基带模块.通常手机关机都是AP模块完全断电,而BB虽然处在关机状态,但实际上

随机推荐