自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 Android---探究Android组件化

最近折腾了一下组件化,记录下心得。Android发展到现在,从刚开始的MVC,到后来的MVP和MVVM,它们似乎都在做同一件事:解耦组件化也是,我们不停的添加新功能和业务逻辑到项目中,随着时间推移和开发人员的增多,项目发展到一定程度的时候,团队开发开始存在很多问题.不得不花费更多的时间去和同事沟通协调。并且在开发过程中,任何一位开发人员没办法专注于自己的功能模块,从而影响整体开发效率。为了满足各个业务模块的迭代而彼此不受影响,这个时候就需要改变项目架构了。围绕着模块化的这个概念,市面上常见的架构有两种

2020-05-27 14:02:11 481

原创 加固APK之后Android12无法安装的问题

首先打包的时候不要去选zipAlignEnabledbuildTypes { release { minifyEnabled true useProguard true// zipAlignEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-opt

2022-03-25 21:56:17 3180

原创 ModelCache.safeGet(androidProjectResult.androidProject::getNdkVersion, ““) must not be null

在更新到Android Studio Bumblebee 版本之后,突然发现项目跑不起来了,报错如下:ModelCache.safeGet(androidProjectResult.androidProject::getNdkVersion, "") must not be null在网上找了好多资料,有说在gradle里面设置ndkVersion的,有说在local.properties里面设置ndk.dir的,也有说在Project Structure里面设置NDK的版本的,对我来说都没用。我

2022-02-14 15:31:02 3394 1

原创 在Flutter插件中的Android项目里面集成第三方的Module/Library/AAR

我现在遇到一个情况,就是在Flutter项目里面编写plugin插件,然后在plugin里面的Android项目里集成一个Module。如果按照正常逻辑来写的话那肯定就是在插件的android里面的build.gradle文件里面写:implementation project(':project')然后就可以在Flutter插件的android项目里使用第三方module的api了,正常这么写是没问题,但当你开始编译Flutter的项目的时候,会遇到下面的错误:Project with pat

2022-01-13 11:10:14 2597 1

原创 关于Kotlin做组件化中遇到Unresolved reference:XXX的问题

具体场景是你又一个CommonLib,被主工程给依赖的,在调用CommonLib里面的资源或者类的时候出现了Unresolved reference:XXX,解决办法是在你的CommonLib的build.gradle里面添加:plugins { id 'kotlin-android' id 'kotlin-android-extensions'}或者:apply plugin: 'kotlin-android'apply plugin: 'kotlin-android-ext

2021-12-17 10:24:43 2730

原创 Flutter中使用dio设置代理来抓包

默认情况下,在Flutter中使用Dio进行网络请求时是不支持抓包的,所以如果要进行抓包,就需要对Dio进行请求封装,并编写代理代码。我们可以直接在Dio里面设置ip以及端口,通过硬编码的方式进行代理,代码如下:(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) { //这一段是解决安卓https抓包的问题 client.badCertificateCa

2021-07-06 12:23:31 2017

原创 Android build packages\flutter_tools\gradle\app_plugin_loader.gradle‘ as it does not exist. site:st

Android在编译的时候报:packages\flutter_tools\gradle\app_plugin_loader.gradle' as it does not exist. site:stackoverflow.com可能是多人开发的时候,flutter的sdk路径被替换了

2021-02-06 08:22:49 1267

原创 requests.exceptions.ProxyError

直接两种方式: session = requests.Session() session.trust_env = False response = session.get(‘http://ff2.pw’) 或者: proxies = { “http”: None, “https”: None} requests.get(“http://ff2.pw”, proxies=proxies) 都可以绕过系统设置的代理就好了...

2021-02-02 08:40:50 152

原创 Kotlin泛型和委托

在Java中泛型早就被用烂了,Kotlin中的泛型和Java的有一样的也有不一样的地方,准确来讲,我们需要给任何要个变量指定一个具体的类型,而泛型允许我们在不指定具体类型的情况下进行编程莫这样编写出来的代码将会有更好的扩展性。在Kotlin中我们定义一个泛型类:class MyClass<T> { fun method(param: T): T { return param }}MyClass就是一个泛型类,但如果我们不想定义一个泛型类,只想用一个泛型方法呢?clas

2020-11-24 22:27:41 143

原创 Kotlin内联函数

上一章学了下高阶函数,我们可以用Lambda表达式很好的使用高阶函数,现在来看看高阶函数的原理,要知道Kotlin文件最终都是被编译成Java字节码的,但是Java中并没有高阶函数这个概念,其实Kotlin的编译器会将这些高阶函数的语法转换成Java支持的那种,比如上次我们写的计算两个数的和和差的函数:fun main() { val result = calculate(1, 2) { num1, num2 -> num1 - num2 }}fun calculate(num1: I

2020-11-24 21:22:15 872

原创 Kotlin高阶函数

高阶函数:如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么这个函数就成为高阶函数。写习惯了Java的人可能就在想,编程语言中的参数有整型、字符串类型,布尔型等字段类型,怎么能接收一个函数作为参数呢?其实Kotlin新增了一个函数类型的概念,基本定义规则如下:(String, Int) -> Unit看起来有点抽象,一点点解释的话就是 ->左边括号里的,就是该函数类型要接收的参数类型,可以定义好多个,以逗号隔开;->右边用于声明该函数的返回值是什么类型,如.

2020-11-23 23:32:09 253

原创 Kotlin扩展函数

扩展函数:在不修改某个类的源码的情况下,仍然可以打开这个类,向该类中添加新的函数。比如说,我们在Android开发中经常用到Toast,每次创建一个Toast的时候,又要传入上下文,还要传入内容,还要时间长短,最后还得写个show,有时候show忘记写了还一脸懵逼的不知道为啥不弹出来,于是可以封装一个ToastUtil来管理toast:public class ToastUtil { public static void showToast(String msg) { Toa.

2020-11-22 21:36:07 468 1

原创 Kotlin静态方法

静态方法:在某些编程语言中又叫做类方法,指的就是不需要创建实例就可以直接调用的方法,几乎所有的变成语言都会支持静态方法的。在JAVA中,定义静态方法很简单,只需要static关键字:public class Util { static void doSomething(){ //doSomething }}可以看到很方便吧,但是在Kotlin中却极度的弱化了静态方法这个概念,Kotlin提供了比静态方法更好用的特性:单例,在Kotlin中使用单例很简单,使用ob.

2020-11-22 20:35:33 506

原创 Kontakt标准函数(with、run、apply)

Kotlin标准函数指的是Standard.kt文件中定义的函数,任何Kotlin代码都可以自由地调用所有的标准函数with:该函数接收两个参数,第一个参数是任意类型的对象;第二个参数是一个lambda表达式。with函数会在lambda表达式中提供第一个函数的上下文,这样就很方便的可以调用第一个函数相关的API,并且以lambda表达式中最后一行代码。标准定义公式为:val result = with(obj){ //这里是obg的上下文,可以直接调用obj相关的API "value"/

2020-11-22 19:44:10 215

原创 Kotlin-Lambda表达式

之所以我觉得Kotlin有点为了语法糖而语法糖的地方就在这里,一个Lambda表达式有五种写法。。。虽然是一步步根据语法糖演变过来的,但是我还是记的相当痛苦。Lambda:一小段可以作为参数传递的代码,语法结构为:{参数名1: 参数类型,参数名2:参数类型 -> 函数体}这是完整的Lambda表达式的定义公式,函数体的最后一行代码就是该Lambda表达式的返回值!当然还有简化版的啦,做一个找出 一个数组里长度最长的单词的函数的话,用Lambda表达式应该这么写:fun main() {

2020-11-19 23:12:19 285 2

原创 Kotlin面向对象

面向对象至于什么是面向对象,我就不多扯了,大概就是下面这样…咳咳抖个机灵,类是对事物的一种封装啊,封装继承和多态是面向对象的三大特征啊啥的这些都被说烂了的。封装我们直接开始在Kotlin中建立一个类,叫Person:class Person { var name = "" var age = 0 fun eat() { println("$name is eating. He is $age years old.") }}接下来开始实

2020-11-19 22:12:00 168

原创 Kotlin流程控制

以前学JAVA的时候知道,程序的执行语句主要分3种:顺序、条件和循环。ifKotlin中的if和JAVA中几乎没有区别,唯一的区别就是Kotlin中if代码块的最后一行是if整个代码块的返回值,比如: private fun testMethod(num1: Int, num2: Int): Int { return if (num1 > num2) { num1 } else { num2 }

2020-11-18 21:53:15 116

原创 Kotlin变量与函数

变量在Kotlin中定义变量与JAVA有很大的区别,JAVA中比如你想定义一个整型变量你的这么写:private int i = 0;如果是一个字符串变量的话你得这么写:private String s = "";其中private是访问控制修饰符,int和String是变量类型,=号后面跟的是具体的值。而Kotlin中定义一个变量,只允许在变量前声明两种关键字:val和var。val:value的简写,用来声明一个不可变的变量,这种变量在初始化赋值之后就再也不能重新赋值,对应JAVA中的

2020-11-17 23:22:29 280

原创 view must have a tag

Android 开发过程中出现了这错误。我这边错误原因是在MVVM架构中使用了组件化,每个组件里面有同名的xml布局导致DataBinding编译时出错,把同名的XML布局改一下名字区分一下就好了。

2020-08-29 14:49:34 2416 3

原创 Android ImageView显示的图片有上下空白块Padding

Android开发中,在Android Studio的xml布局中放入ImageView时,有时候会出现图片莫名其妙的多了上下的边距:但是明明打开这张图片是没有这个边距的,这个时候需要在这个ImageView控件中添加一行代码:android:adjustViewBounds="true"原因是因为图片高度设置的是wrap_content,但有时候图片的质量很高,如果宽度显示的效果是适应屏幕的,那系统就会误以为高度也适应了屏幕。所以用android:adjustViewBounds属性用于保持宽

2020-08-28 09:29:48 1063

原创 Gradle build failed to produce an .apk file. It‘s likely that this file was generated under XXX

今天用Flutter点击run按钮准备跑在手机上调试的时候,发现怎么都跑不起来,报错如下:Gradle build failed to produce an .apk file. It's likely that this file was generated under \build 文件夹, but the tool couldn't find it.在stackoverflow上面看了一圈,大部分人的回答都跟Flavor有关,考虑到我在flutter的android项目中搞了多渠道打包,认真检查

2020-08-13 10:23:10 6786 1

原创 Android 获取jks签名信息

Android开发过程中,在我们把APK上架到应用市场时,或者使用某些第三方SDK时,会用到我们APK的签名信息,比如SHA1,和MD5。在终端输入:keytool -exportcert -list -v -keystore D:\keystore.jks之后会让你输入口令,注意此时输进去的口令是不可见的,所以你不要以为自己没有敲到键盘,之后就可以看到签名的各种信息了...

2020-08-10 11:07:52 1010

原创 Android---探究Handler消息机制

在开发Android应用程序的过程中,如果耗时的操作放在Activity的主线程(UI线程)中执行的话,超过五秒钟的时候,就会出现传说中的ANR(Application Not Responsding),即应用无响应。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现ANR。所以在进行一些耗时操作的时候,我们应该放在子线程中去完成的,完成之后如果我们要更新主线程中的UI视图的话,就要用到Handler了,因为Android系统是禁止在子线程中去更新UI视图

2020-07-10 01:58:14 327

原创 Android Studio编译报Default interface methods are only supported starting with Android N (--min-api 24)

Android Studio在编译APK的时候报错:Default interface methods are only supported starting with Android N (--min-api 24)错误原因:这是因为java8才支持静态接口方法的原因解决办法:在app的build.gradle文件中配置使用java8编译在app的buiild.gradle中android代码块中添加如下代码://指定jdk版本 compileOptions { so

2020-06-28 17:12:29 1299

原创 关于Windows10 VT虚拟化无法开启

事情经过是这样子,我白天把windows10 更新到了2004版本,然后折腾了一下windows沙盒(sandbox),完后写代码的时候发现Android模拟器打不开,或者一打开就说我VT没有开启就终止了,但是我昨天还用的好好的,下载了一下CPU-V来检测一下,果然说我的CPU是支持VT-X的,但是VT-X没有开启。这就邪了门了,查了半天又说要关闭沙盒,又说要关闭Hyper-V重启了几次发现根本没鸟用,打开模拟器还是报错。万般无奈下,百度解决不了的就只能上谷歌了,看了半天让我看到这么句话:意思是我关

2020-05-31 22:51:55 9050

原创 Android组件化开发时无法引用公共模块中的类库问题

在进行组件化开发时我的androix组件都放在commonLib公共组件中去引入的,但是当我在组件中导入AppCompatActivity等类的时候怎么都导不进来。后来研究了一下发现是因为我在commonLib组件中去引入各种类库的时候用的是implementation,换成api就好了,以前compile也没有这个问题,关于compile跟api没啥区别,现在compile已经被废弃了,在高版本的gralde中使用compile的话会报错。而 implementation:implementati

2020-05-26 15:51:03 1326

原创 VUE中使用JSSDK时苹果的微信浏览器失败

公司公众号是用vue写的,要在vue中调用扫一扫功能,需用集成微信的JSSDK,秉着刚优化完vue项目的心情,我毫不犹豫的在index.html中引入了JSSDK的js文件没有从npm中去install,然后直接在主页去调用wx.config()方法去配置,然后调用扫码功能都正常,用我的安卓手机测试一遍过美滋滋。过一天测试说苹果手机微信打开公众号打不开扫码页面,我不信邪的拿苹果手机过来测试,真的打不开扫码,wx.scanQRCode()都没有调用,在wx.config()这个方法中把debug设为true

2020-05-22 17:42:16 768

原创 VUE里面自定义的方法没有调用

这个问题遇到过很多次了,这次又遇到一次浪费我时间想了一会儿,决定记下来,先举例wx.scanQRCode({ needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果, scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有 success: function (res) { var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果 i

2020-05-21 10:38:16 2173

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除