![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
dingpwen
这个作者很懒,什么都没留下…
展开
-
[Android]在windows下使用facebook的apk优化工具redex
Android应用优化,有一种打包后的优化,或叫dex优化,例如可以去除一些不必要的信息,从而实现对apk的裁剪,又例如对dex文件进行排序重打包,优化app冷启动速度。这些方法功能最全又最好的就是facebook的redex。网上都说redex只能在mac或者ubuntu下使用,其实官网文档显示在window64下也是可以使用,只是可能步骤稍微复杂一点,主要是编译redex的源代码。在哇indow64下编译redex,可以使用Visual Studio,但是会遇到很多错误,需要自己修改,也可以单独下.原创 2021-06-16 13:52:27 · 1756 阅读 · 7 评论 -
The application could not be installed: INSTALL_PARSE_FAILED_NO_CERTIFICATES
最近AS运行APP进行调试发现,出现如下错误:网上搜到的一些答案有些误人子弟。仔细看来,应该是Google开始学苹果,所有apk都需要签名了,仔细看错误界面,右边有个fix,点击看看:这里可以把本地的签名文件设置好,如果没有自己去生成一个签名文件,如何生成网上有答案。如何点击+按钮添加进去,配置好相关密码后,点击Apply。然后在Build Variants 旋转customDebugType ->Sigining config,选择刚才设置的签名即可。...原创 2021-06-08 16:05:23 · 7752 阅读 · 5 评论 -
[记录]Android Studio Gradle 自定义插件
关于如何自定义Gradle,插件,这里https://blog.csdn.net/huachao1001/article/details/51810328这位高手已写的很详细,只是有些地方与实际有些差别,这里记录一下。1)新建Module删除相关文件后,AS点击无法打开Module下的子目录(对应上面文章提到的第三步)原因:AS默认是Android工程,删除相关文件后无法识别为Android工程,所以就无法打开,需要切换到Project模式,就可以看到目录结构:2)build.gradle应该删除原创 2021-03-18 16:19:47 · 274 阅读 · 0 评论 -
Android 4.1:Entry name ‘classes.dex‘ collided
以前编译的apk导致,删除build目录下所有apks,或直接删除build下所有文件,再编译生成apk即可。原创 2021-02-26 13:20:34 · 1634 阅读 · 2 评论 -
你的主机中的软件中止了一个已建立的连接
有好一段时间没打开Android Studio了,今天打开,居然提示我:15:50 Gradle sync failed: 你的主机中的软件中止了一个已建立的连接。Consult IDE log for more details (Help | Show Log) (13 s 360 ms)于是,我按上面的地址打开log所在目录查看log,发现:org.gradle.tooling.GradleConnectionException: Could not run phased build ac原创 2021-02-25 16:16:52 · 1811 阅读 · 0 评论 -
[记录]M300 RTK监听电池状态
M300 RTK无人机连接到MSDK应用程序后,应用程序获得无人机对象,aircraft,无论是IOS中的self.aircraft.batteries或者Android中:aircraft.getBatteries()统统都是null,也就无法通过这个监听电池状态,对应M300或者M600,需要用如下接口来监听电池状态:IOS: DJIBattery.aggregationDelegate = self;Android: Battery.setAggregationState原创 2020-12-18 10:43:34 · 686 阅读 · 0 评论 -
[记录]Android删除缓存
@Synchronized fun clearCache(context: Context) { deleteDir(context.cacheDir) if(Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) { context.externalCacheDir?.let { deleteDir(it) } } } priva...原创 2020-11-20 10:18:54 · 147 阅读 · 0 评论 -
[记录]Android 无线调试
现在的计算机设备不像以前接口一堆,反而是接口越来越少,像某人的Dell笔记本居然就一个usb接口,总不能为了调试ANdroid应用程序去买个USB转接器吧,也不能总是插拔鼠标换线,看到Android 11新特性----无线调试,搜了下网络才发现原来,Android 早就可以无线调试了。1,第一步需要连接usb,给手机开启一个调试端口,开启成功后就可以断开usb链接,而且以后调试都不用再进行这一步:连接usb后,输入:D:\Android\android-sdk\platform-tools>ad原创 2020-10-10 10:26:14 · 530 阅读 · 0 评论 -
[记录]DJ Mobile SDK移植问题
关于大疆Mobile SDK如何移植的问题,参考官方的文档以及Demo即可,这里只是记录移植过程中的连个坑。1)移植后,实机运行APP,无法注册app的问题这个问题,我用我的代码对比了官方DEMO,无论是依赖的第三库,还是权限,或者配置都没少,实机上就是注册不了(模拟器可以注册),最后发现居然是:minSdkVersion 19这里的问题,我其它项目minSdkVersion是26的,因此新建工程后还保持26,但是大疆的minSdkVersion为啥就不能改大呢,20-23没试过,24试过也不行,原创 2020-08-18 16:24:31 · 920 阅读 · 0 评论 -
[记录]Navigation无title注意事项
我们要想是的某个activity全屏或者去掉标题栏(导航栏),自定义一个,无标题的主题,然后在manifest中对activity设置一下theme即可:android:theme="@style/NoTitle"但是对于Navigation的设计(Android studio新建一个Bottom Navigation Activity的工程),就要注意,因为运行后就会发现出现ActionBar相关的空指针。所以对于用Android studio默认生成的Navigation工程,要想实现Noti原创 2020-08-05 09:38:54 · 330 阅读 · 0 评论 -
[记录]习惯的错误力量(Handler与IntentService,SharedPreferences与多进程)
Android中当我们想延迟某段代码的执行,或者设置一个定时任务,我们很习惯的写下如下代码:new Handler().postDelayed(() -> { }, delay);也许大多数情况下是没有问题的,如果用在IntentService中,就有问题了。new Handler()默认使用Looper.myLooper(),这对应IntentService的onHandleIntent中执行的代码,Looper.myLooper()等于mServ.原创 2020-07-14 15:54:14 · 174 阅读 · 0 评论 -
Flutter环境安装(win10_64)
添加如下两个环境变量(避免翻墙):export PUB_HOSTED_URL=https://pub.flutter-io.cnexport FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn从git下载Flutter稳定版本:git clone -b stable https://github.com/flutter/flutter.git下载完成后,在Flutter目录下,双击运行flutter_console.bat.原创 2020-06-22 18:18:21 · 509 阅读 · 0 评论 -
[转载]全网最全 Flutter 与 React Native 深入对比分析
原文地址:https://www.jianshu.com/p/da80214720eb作为 GSY 开源系列的作者,在去年也整理过 《移动端跨平台开发的深度解析》 的对比文章,时隔一年之后,本篇将重新由 环境搭建、实现原理、编程开发、插件开发、编译运行、性能稳定、发展未来 等七个方面,对当前的 React Native 和 Flutter 进行全面的分析对比,希望能给你更有价值的参考。是的,这次没有了 Weex,超长内容预警,建议收藏后阅。前言临冬之际,移动端跨平台在经历数年沉浮之后,如今还.转载 2020-06-18 10:57:59 · 436 阅读 · 0 评论 -
[转载]OkHttp 拦截器的一些骚操作
原文地址:https://juejin.im/post/5afc1706518825426f30f6ec骚操作目录也就不废话了,可以看到下面的目录,有哪些骚操作 ,希望可以帮助日常开发中的小伙伴们。URL重定向请求体数据加密HEAD动态添加请求日志抓取URL重定向如何重定向,说白了就是更换个新的url,但是一般服务端做比较好,客户端就显得有些鸡肋。但是这个东西日常也会有用到,比如一些场景,测试生成环境的切换。业务多了,几个人混合开发的后台,每个人的代码不同意导致了baseurl.转载 2020-06-10 11:19:59 · 204 阅读 · 0 评论 -
[记录]PreferenceFragmentCompat 去除左边空白正确方法
在PreferenceFragmentCompat中应用Preference,如果不设置ICON,左边会有很大一个空白,如果你到网上搜索解法,一般都如如下博文:https://blog.csdn.net/csdn0lan/article/details/88760088实际上,正确的方式应该是通过设置属性来解决:<Preference app:key="logon" app:title="@string/setting_logout" app:su原创 2020-06-05 10:04:12 · 936 阅读 · 1 评论 -
正确监听WorkerManager返回结果的方法(MediatorLiveData之坑)
我们知道,要监听Worker Manager的返回,要使用如下方法:WorkManager.getInstance(this).getWorkInfoByIdLiveData(request.getId()).observe(LifecycleOwner, new Observer() {}但是我们的WorkManager并不总是写在Activity或者Fragment中,一般好的架构中,WorkManager很少直接在View中写,那么这么情况下如何监听其返回值呢?如果你去网上搜索,各路神仙都原创 2020-06-02 13:59:18 · 1778 阅读 · 0 评论 -
Google推荐的Android的网络架构实现
Google推荐的网络架构,关键部分如下:Part 1:Use Room to fetch and cache dataEnsure that your app stores all data on disk using a database or similar structure so that it performs optimally regardless of network conditions. Use the Room persistence library to cache dat原创 2020-05-29 17:20:31 · 413 阅读 · 0 评论 -
[记录]Kotlin协程
协程又称轻量级线程,在kotlin中可以用来代替线程。通常模式 GlobalScope.launch: GlobalScope.launch { test1() } } private fun test1() { Log.d(TAG, "test1") }通常模式相当于线程的new Thread() {}.start()指定上下文:GlobalScope.launch(Dispatchers.Ma原创 2020-05-27 15:40:50 · 313 阅读 · 0 评论 -
[转载]Android 中的简易协程:viewModelScope
原文地址:Easy Coroutines in Android: viewModelScope原文作者:Manuel Vivo译文出自:掘金翻译计划本文永久链接:github.com/xitu/gold-m…译者:twang1727Virginia Poltrack 绘图取消不再需要的协程(coroutine)是件容易被遗漏的任务,它既枯燥又会引入大量模版代码。viewModelScope 对结构化并发 的贡献在于将一项扩展属性加入到 ViewModel 类中,从而在 ViewMode..转载 2020-05-26 17:08:59 · 2331 阅读 · 0 评论 -
[App Bundle]Android动态化技术实例
最近几年,Android动态化,插件化相关技术在国内市场弄的风声水起,可以说Android程序员不去了解一下相关技术都会被人鄙视,但是相关技术却遭到苹果和Google双重封杀,比较人家希望平台的生态完全掌握在自己的手中。但国人的努力并非没有得到认可,Google就为此开发了App Bundle,其实就是对相关技术的认可。使用App Bundle,apk必须上传到google play才支持,幸运的是,国内华为的HMS为了兼容android平台,也支持相关技术,所以实例中会同时说到两个产家的方案。App B原创 2020-05-25 13:05:26 · 1272 阅读 · 0 评论 -
Navigation with CameraX
Android中的导航组件Navigation其实是仿ISO的,可以用来实现“一个应用只有一个Actiivity”的目标,唯一的Actiivity只是用来指定Navi_Graph的图根,而每一个页面只是一个Fragment,页面间跳转关系,定义在navi_graph.xml中,不同页面间跳转不在使用startActivity的方法,而是使用Navigation.findNavController() .navigate(目标)来实现。整个Navigation使用起来很简单。使用过Android camer原创 2020-05-21 17:28:40 · 364 阅读 · 0 评论 -
最简单的基于网络的分页实例(Android Paging base on network)
这里的分页是指Google AAC框架中的分页库,无论是官网的例子(github上的)还是网络其他例子(参考自官网的),由于考虑太多,实现的比较全面,而且基本是用kotlin+Rxjava实现,导致代码看起来很难理解,这里用一个非常简单的例子来实现基于网络的分页,用于理解基于网络的分页,代码很基础,java实现,除分页库外,只使用了Okhttp3。实现DataSource要实现基于网络的分页,首先需要自定义DataSource,基于本地数据库的分页是可以是使用默认DataSource,而不需要去自定义原创 2020-05-19 17:53:19 · 446 阅读 · 0 评论 -
WorkManager的使用
WorkManager跟JobScheduler一样用来实现特定情况下的后台服务,但WorkManager功能更加丰富,使用起来也更加简单。1.WorkManager 简要价绍(来自官网)使用 WorkManager API 可以轻松地调度即使在应用退出或设备重启时仍应运行的可延迟异步任务。主要功能:最高向后兼容到 API 14在运行 API 23 及以上级别的设备上使用 JobScheduler在运行 API 14-22 的设备上结合使用 BroadcastReceiver 和 AlarmMa原创 2020-05-18 16:37:04 · 371 阅读 · 0 评论 -
[记录]使用wait notify实现异步转同步方法
Android的网络访问由于不容许运行在主线程,所以一般的网络相关方法都是异步调用的,但有时候有需要获得根据网络方法返回的结果,这时候就需要将异步方法转为同步。直接用wait notify就可以: public synchronized NaviLatLng searchLocation(Context context, String address, String city) { GeocodeSearch geocodeSearch = new GeocodeSearch(con原创 2020-05-15 18:11:05 · 316 阅读 · 0 评论 -
[记录]Android 9.0判断wifi是否连接中的方法
public static boolean isWifiConnected(Context context) { ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); if(manager != null) { NetworkCapabilities cap = manager.getN...原创 2020-05-13 18:15:09 · 945 阅读 · 0 评论 -
JobIntentService与IntentService的区别
JobIntentService与IntentService都是可以用来执行后台任务,再Android O之前,使用起来效果没多大差别,但是Android O以后JobIntentService不会立即执行,等手机进入一定状态后才会执行任务,所以不能用来执行及时的后台任务。When running as a pre-O service, the act of enqueueing work will generally start the service immediately, regardless原创 2020-05-12 17:02:52 · 3514 阅读 · 0 评论 -
[记录]Android 9 APK自动安装
这里主要是指Android 7.0以后权限问题,Android 7.0以后不能直接暴露文件路径,需要通过FileProvider来向其他应用传递文件路径。首先manifest中添加定义: <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider"原创 2020-05-12 15:54:35 · 1006 阅读 · 0 评论 -
[记录]AIDL之Proxy与Stub
Proxy&Stub是Android service的基本架构,但是总是记不得谁是谁那边的,这里记录一下:APP func() ->>Proxy: func -> onTransact ->>Stub: onTransact --> func—>>> Service: func...原创 2020-05-06 13:24:48 · 288 阅读 · 0 评论 -
[记录]No version of NDK matched the requested version 20.0.5594570
根据Android Studio提示更新gradle到最新版本:3.6.3,然后进行gradle sync,却提示错误:10:41 Gradle sync failed: NDK not configured. Download it with SDK manager. Preferred NDK version is ‘20.0.5594570’. Log: E:\Project\VIWal...原创 2020-04-29 11:05:50 · 15486 阅读 · 0 评论 -
Handler.post引发的思考
前几天突然发现修改后的app运行起来很卡顿,使用Android studio的Profile也看不出个所以然来,于是对比了一下前面版本的代码,发现问题所在:mNaviHandler.postDelayed(mRecThread, 5000);mRecThread是一个一直在后台运行的线程,本来是想让其启动延迟一些(因为有些线程需要跑在前面),与是利用现存的handler给它postdelay...原创 2020-04-28 13:44:52 · 455 阅读 · 0 评论 -
如何实现优先级线程池队列
首先,我们需要定义一个带优先级的Runnable: /** * to use PriorityBlockingQueue, we need PriorityRunnable threads */ public abstract class PriorityRunnable implements Runnable, Comparable<PriorityRu...原创 2020-04-22 14:29:08 · 588 阅读 · 0 评论 -
[记录]Android单元测试
Android单元测试分为两种,一种是Junit test, 一种是InstrumentedTest,Junit test可直接称作单元测试,InstrumentedTest叫做设备化测试或者自动化测试。两种测试啥区别了?简单地说,Junit test测试纯java代码的功能,InstrumentedTest测试对有Android代码的功能的测试,即,如果你的测试代码中有用到Android的某些...原创 2020-04-21 14:29:31 · 195 阅读 · 0 评论 -
[记录]相机预览YUV转Bitmap
使用Camera2采集相机预览数据,一般推荐格式为YUV,而目前主流的图像处理算法却只针对RGB的,所以一般需要先将YUV图片格式转为RGB,在Android中为Bitmap。这里有两个方式,一种是先转为jpg,再通过jpg转为Bitmap: YuvImage yuvImage = new YuvImage(nv21, ImageFormat.NV21, stride, heig...原创 2020-04-21 10:12:50 · 1255 阅读 · 0 评论 -
Android Phone蓝牙通信方式总结(Socket与Gatt)
Android手机间通过蓝牙方式进行通信,有两种常见的方式,一种是socket方式,另一种是通过Gatt Server(Android 5.0以后)通信,socket方式最为简单,但是很多低功耗的蓝牙设备,如单片机上的蓝牙模块可能不支持。而Gatt方式说起来就比较复杂,我研究了好会儿,搜索了不少资料,走了不少弯路才总结出来。首先来看比较简单的socket方式其实无论是socket方式还是Ga...原创 2020-04-16 18:22:32 · 3323 阅读 · 1 评论 -
(简单易懂)浅用MVVM模式---设置列表与登录验证
看网上一堆对MVVM模式的价绍和实例,看的云里雾里,其实MVVM模式没有那么高大上,在很多web开发工具中早已在使用,(核心就是一个打他binding),例如vue、nodejs、微信小程序等。对于Android来说,MVVM模式一般都是和livedata一起使用的,但是我总觉得将livedata写在xml布局文件中有些不伦不类,布局就是布局,逻辑就是逻辑,写到一起严重破坏了代码的美感,故这里,...原创 2020-04-01 22:14:59 · 851 阅读 · 0 评论 -
RycycleView与MVP模式的使用例子
我们用RecyclerView来显示一个好友列表,数据从远程服务器数据库获得,然后就是一个非常适合的MVP模式的例子,Model负责通过Okhttp获取数据,Presenter接收Model的数据,处理后,通知View更新,非常标准的一个MVP模式。首先看MVP的接口定义IModel、IView、IPresenter,通常都是把它们放到一个Contact接口类中统一管理:import okht...原创 2020-03-31 22:38:21 · 299 阅读 · 0 评论 -
Okhttp传参与tornado解析(POST方式)
Okhttp传参方式不同,tornado服务器那边的解析方式也就不同,这里记录两种通用的传参方式及对应的解析方式:普通form表格方式:1)okhttp: val formBody = FormBody.Builder() for(entry in params.entries){ formBody.add(entry.key as ...原创 2020-03-29 21:42:00 · 344 阅读 · 0 评论 -
Kotlin 风险高、RxJava 已过时,Android 原生开发现状分析
Kotlin 风险高、RxJava 已过时,Android 原生开发现状分析!作者:Vasiliy Zukanov,独立 Android 开发及软件顾问链接:https://www.techyourchance.com/the-state-of-native-android-development-november-2019/译者:罗昭成,Android 开发者当你好不容...转载 2020-03-25 18:21:54 · 591 阅读 · 0 评论 -
史上最全Andriod手机热点Socket通信--基于Android 9
前言关于开启热点,手机间通信,网上有很多相关的例子,但几乎所有的例子只在开启热点和进行socket连接部分有比较详细的描叙,实际上,这其中还有很多重要的细节,例如热点的IP如何获得, socket连接如何保证连接上等?正文两个Android手机要想相互间通信,可以通过蓝牙,也可以通过WIFI,相对而已WIFI的速度更快,但两个手机必须连接同一WIFI源才行。如果没有WIF源呢?Android...原创 2020-03-24 15:25:00 · 2098 阅读 · 2 评论 -
waiting for target device to come online问题的正确解法
最近Android studio运行模拟器调试程序,突然发现模拟器起来后程序一直无法运行,studio中一直显示waiting for target deviceto come online,等很久都没用,即使重启电脑也没用。其实在以前使用实机链接usb也遇到过usb连接后无反应的问题,这跟模拟器这个问题是一样的,都是因为手机中的adb状态出问题了导致,一般重启手机后再连接即可。但模拟器重启没用...原创 2020-03-20 17:18:32 · 2918 阅读 · 0 评论