序言 最近学习了Flutter一段时间,确实感觉到Flutter是一个未来的大趋势,更新到1.12后一套代码能在全平台运行。(Andorid,IOS,Linux,Windows,Web,Mac)并且相对来说学习难度不大,语法,工具都比较现代与先进。实在建议各位APP开发或者前端开发好好学一学。好了说重点,今天我的同事运行Flutter项目时就出现了一个AndroidX的兼容问题,虽然对我来说不是什么大问题,但是对于没有Android开发经验的前端来说可能这个问题会卡一天。因此还是留下这个解决方案,好好做人,贡献社会 问题标识 引入第三方插件后,重新在Android上编译出现错误提示 java.lang.RuntimeException: Duplicate class android.support.v4.app.INotificationSideChannel found in modules classes.jar (androidx.core:core:1.0.2) and classes.jar (com.android.support:support-compat:28.0..... Flutter 手把手教你解决引用第三方插件导致 AndroidX 编译失败的问题 Flutter
序言 因为在工作中有给APP优化电量消耗的需求,因此了解到了battery-historian这个google出品的电量分析工具。它的配置方式有两种其一是下载go,python,git,对源码进行编译,但是该方法过程有点繁琐。第二种方式就是下载Docker一键配置环境,我这里用的就是方法二。 1.什么是Docker 不知道你有没有经历过配置ADT(Android Developer Tools)的经历,在大学期间配置这个环境对于新手的我来说那是噩梦般的体验。首先需要安装JDK,配置JAVA环境,下载安装eclipse,在eclipse上安装ADT插件,下载SDK,配置NDK工具路径和环境等等..经过N多的步骤后,当你以为到达黎明前夕时点击运行分分钟报出各种匪夷所思的问题,又得焦头烂额的搜索各种解决方案。如果你觉得这些还好,那对于linux环境几十个依赖的环境配置不知道你会作何感想。为了解决环境依赖的问题Docker横空出世,它实际上就是一个虚拟机,能通过一个命令将完整的一个环境下载下来,你不再需要为了各种兼容或者依赖等问题而挠头。(为了保护程序员的头发作出了史诗级的贡献) 2.怎么安装.... Docker的简单安装与使用 Coder
序言 之前心血来潮开始了开发99个APP的计划,这是我的第三个APP Recorder251~(撒花) 看到这个APP的名字,懂的人大概会心一笑了。这个APP的创作灵感就是华为李宏远事件。华为前员工李洪元被华为举报涉嫌敲诈导致被刑拘251天。首先,我算是华为的花粉,鸿蒙发布会时我就在现场的最前排。但当我看到李洪元事件的发生的全知乎的删帖,热度的减退,心里有了点别扭。这就是开发这个APP的背景了。 简介 这个APP看上去跟Chrome非常相似,但是实际上它是一个录音机。除了正常的网页浏览外,当点击菜单列的星星按钮后就会开始录音,重新点击星星就会保存录音。 点击星星旁边的下载按钮就可以跳转到录音记录界面 当然其他菜单按钮是没有作用的(doge) 夹带了私货,点击home按钮后,会进入到我的Blog 尾语 这个App功能较为简单,技术知识就不写啦。另外,欢迎来知乎给我一个Start,或许能让你发现一个有趣的人~ 我的知乎 我的99APP开发进度 [APP] Recorder251 - 录音器 Android
序言 二维码/条形码是生活中非常常见的技术,只要通过手机或者扫码枪扫描一下就能读取到里面的信息,给我们的生活带来了很多的便利。在Android开发当中,这也是很常用的技术。本文主要简单的介绍所用到的工具及用法。 1.导入包 最通用的条码识别库应该是zxing,但是由于该库过于复杂,对于刚接触的人来说无异于杀鸡用牛刀。因此我们使用zxing-android-embedded这个封装过的库用作这次开发。 因为该库有很多东西需要我们自己更改源码,所以直接下载 zxing-android-embedded 并import 该module,具体过程不详叙。 2.常规用法 1.在application里增加硬件加速 <application android:hardwareAccelerated="true" ... > 2.通过该命令打开扫码的界面 new IntentIntegrator(this) .setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES) .setPrompt("提示") .setCameraId...... Android 二维码/条形码的识别或生成 Android
序言 记录Android的一些判断网络,蓝牙,GPS,等设备状态的方法。 1.判断网络是否可用 // 是否有可用网络 private boolean isNetworkConnected() { ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo network = cm.getActiveNetworkInfo(); if (network != null) { return network.isAvailable(); } return false; } 2.判断wifi是否可用 // Wifi是否可用 private boolean isWifiEnable() { WifiManager wifiManager = (WifiManager) mContext .getSystemService(Context.WIFI_SERVICE); return wifiManager.isWifiEnab..... Android常用的蓝牙,GPS,网络等状态检测方法汇总 Android
序言 之前买了台Android测试机,发现原生的Launcher不太对我胃口,毕竟Android的精髓在于折腾。打算学习一下Launcher开发,顺便有了这篇文章。实际上我们的Android桌面Launcher其实也只是一个稍微特殊一点的App。并没有什么太高深的内容,我们都可以通过简单的代码实现你心中最完美的Android Launcher。 惯例先上效果图 画质较差,将就看下 1准备工作 实际上判断一个App是否是Launcher很简单,我们只需要在manifest里面增加两句category <activity android:name=".MainActivity" android:screenOrientation="portrait" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category an..... 教你撸一个属于你独一无二的 Android Launcher Android
1.序言 Android 原生手机熄屏的时候可以看到屏幕饱和度会减低变灰,然后有一个缩放的动画再关闭屏幕。我一直很好奇这个饱和度变低的效果到底是如何实现的。今天决定来尝试用自己的方法实现一下类似的效果。 先上效果图 gif20190516170046.gif 2.思路 第一反应也是最容易想到的方法就是使用ValueAnimator在UpdateListener 里面遍历所有window.decorView下的子View,依次改变其饱和度。但是不用想都能知道这个方法有很大的问题。如果界面的控件有很多的话,那光跑这个效果就足以榨干手机的性能了。编写Android 里面的动画效果其实有两个很重要的点。1.用尽量少的性能实现相同的效果 2.不要用物理的思维去实现(比如有些悬浮粘附效果其实只是两个View交替显示的障眼法)既然依次遍历不可行,那我是否可以只改变一个View来实现这个效果呢? 3.实现 首先随便写一个带按钮的布局 关键是必须在最外层有一个match_parent大小的ImageView可以覆盖住整个布局 设置按钮的点击事件 btn.setOnClickListener { va...... 使用 ColorMatrix 实现界面整体饱和度渐变 Android
1.序言 最近找到了一个非常简单的DB管理工具 名为Sugar ORM 号称不需要编写SQL语句就能实现数据库操作。实际使用了一番发现在数据库表结构不复杂的情况下还是蛮好用的。另外Sugar ORM不提供数据库加密,因此需要配合SQLCipher实现加密。(这两个工具似乎在其他平台也能使用,下面以Android为例) 2.牛刀小试 Sugar ORM 1.导入Module 因为后面需要加入SQLCipher,所以直接下载源码import Module方便修改源码。具体import方法略过。 2.创建数据库基本信息 你的数据库信息需要提前在Manifest里输入,SugarDB才能正确初始化 <application> <meta-data android:name="DATABASE" android:value="sugar_example.db" /> <meta-data android:name="VERSION" android:value="2" /> <meta-data android:name="QUERY_LOG" andr.... SugarORM SQLCipher 数据库及加密教程 Android
序言 这次开发的App跟BLE Beacon相关,原生负责搜索附近的Beacon数据并上报到服务器,Flutter端作为信息展示。本来两边是泾渭分明的,但是原生这边需要获取到Flutter端请求的Token作为服务器身份验证。于是有了这篇最简单的数据交互方法。 1.SharedPreferences 本来打算按部就班的按照 Flutter与原生(Android)的交互 实现交互方法的。跟前端小伙伴简单沟通了下,发现Flutter端是使用名为SharedPreferences的插件保存Token的。作为Android 开发者,对这个名字应该相当熟悉了。如果它的机制跟Android 原生的SharedPreferences一样保存为本地Xml,那我岂不是连交互方法都不用写就能获取到他的Token了。 2.分析源码 这里是SharedPreferences的源码地址 从目录可以看到其实这个Flutter插件本质也只是一个Flutter项目,android 与 ios 文件夹分别对应不同的实现。我们进到android目录下看看到底是怎么实现的。 这个插件的实现还是比较简单的,SharedP...... Flutter 与原生最简单的数据交互的方法 Coder
序言 我所在的公司是一家外包公司,项目很多可是只有我一位Android开发,为了能更有效率的接项目,经理决定让有Vue基础的几位前端开发配合我开发,于是就有了一篇踩坑的文章。 1.Weex是个啥? Weex是阿里巴巴出品的一套类似React Native的混合开发技术,目标是一套代码,多端运行。(Web,IOS,Android)阿里自家的淘宝客户端上也有使用。能通过加载服务器js文件随时切换UI。 2.咋样用? 1.配置环境 在Android端的配置并不复杂,按教程设置gradle依赖,权限,然后在你的Application初始化 fun initWeexSdk() { val config = InitConfig.Builder().build() WXSDKEngine.initialize(this, config) } 跟教程比少了两个Adapter,但是没关系,后面会讲到怎么用。 接下来就要封装一个简单的BaseWXActivity,继承IWXRenderListener abstract class BaseWXActivity : BaseActivity(), I...... Weex-Android 教程 - 从入门到放弃 Android
作为一热爱搞机的孩子,即使这回答没人看得到我也要答。 第一次对手机感兴趣是在初中,那时候同学用的大多数是诺基亚,5230盛行。 然而我家父母并不支持上学期间有手机,为了拥有一部自己的手机,我用几百块偷偷去二手市场转了圈。 相中了那么一部手机 (网图,侵删) HTC的touch pro2 为什么看上它呢,原因很简单 因为它是微软系统的,我幻想能在这部手机上玩电脑游戏。挂个梦幻什么的……(我家有个大哥,家里的电脑我基本碰不到) 然而拿到回家的时候我发现虽然是微软的,但是TMD运行不了电脑的程序啊!!!!我瞬间就懵逼了(太天真了) 相信很多童鞋都没见过这个系统,这是微软的Windows Mobile系统,简单来说是WP的前身,不过跟WP天差地别,功能跟PC非常相似,但软件十分的稀少没什么人用。(经 @JOwOS 评论提醒,图中的系统是WM6.0) 一年过去,安卓悄然升起,手机店,宣传海报无一例外的都是水果忍者,愤怒的小鸟,我,我也想有部安卓手机啊!我也想切水果啊!但我学生党没钱啊!平时在家玩手机都是偷偷躲房间不敢让父母看到的你敢信吗! 机缘巧合,我上贴吧的时候看到了刷机这两个字,知道原来...... iPhone 到底爽在哪里? 杂谈