android架构

Android架构模式三:MVVM

匿名 (未验证) 提交于 2019-12-03 00:30:01
原文地址: https://upday.github.io/blog/model-view-viewmodel/ 在开发upday应用的前六个月中,经过四次不同设计,我们学到了一个重要的教训:我们需要一个能及时相应设计变化的架构!最终我们选择的解决方案是MVVM。和我一起来探索下什么是MVVM;我们是如何在upday中应用它的以及是什么使得它对我们而言是如此完美地适合。 MVPģʽ MVVM的主要参与者是: View -向ViewModel报告用户行为 ViewModel -公开与View相关的数据流 DataModel -抽象的数据源。ViewModel与DataModel协作以获取和保存数据。 乍一看,MVVM似乎与MVP模式非常接近,因为两者在抽象View的状态和行为方面都做得非常好。MVP抽象了一个独立于特定平台用户界面的View,而MVVM则是为了简化编写事件驱动的用户界面而创建的。 如果MVP是由Presenter直接告知View显示什么,那在MVVM中,ViewModel暴露View可以绑定到的事件流。这样,ViewModel就不需要像Presenter一样再持有View的引用。这也意味着MVP模式所需的所有接口现在都被丢弃了。 View同样也会通知ViewModel不同的用户行为。MVVM模式支持View和ViewModel之间的双向数据绑定

Android .so abi兼容,通用armeabi-v7a和arm64-v8a架构的方法

匿名 (未验证) 提交于 2019-12-03 00:26:01
写在前面:请先了解 Android的.so文件、ABI和CPU的关系 http://blog.csdn.net/xx326664162/article/details/51163905 、 armeabi-v7a、 arm64-v8a、 mips、 mips64、 x86、 x86_64等abi的原理后,很久以前一般都只是用armeabi在做兼容。现在其实市面上主流的手机都支持armeabi-v7a和arm64-v8a。请看如下简介: 各版本的分析如下所示: mips / mips64: 极少用于手机可以忽略,有兴趣的可以百度一下。 x86 / x86_64: x86 架构的手机都会包含由 Intel 提供的称为 Houdini 的指令集动态转码工具,实现 对 arm .so 的兼容,再考虑 x86 1% 以下的市场占有率,x86 相关的两个 .so 也是可以忽略的 armeabi: ARM v5 这是相当老旧的一个版本,缺少对浮点数计算的硬件支持,在需要大量计算时有性能瓶颈 armeabi-v7a: ARM v7 目前主流版本,一般市面上的骁龙系列或者麒麟系列的处理器绝大部分都是这种架构 arm64-v8a: 64位支持 所谓的ARMv8架构,就是在MIPS64架构上增加了ARMv7架构中已经拥有的的TrustZone技术、虚拟化技术及NEON advanced

Android Studio 开发(二)问题

匿名 (未验证) 提交于 2019-12-03 00:26:01
Ŀ¼ 一、Mac下de的java路径 二、android studio的编译命令 三、在cocos3.1.5中 android-studio中的build-cfg.json找不到了 四、导入第三方jar包: 五、 文件同步 Synchronize 六、找不到libs文件夹 七、android studio打包不同cpu架构的so文件 八 、 九、 Android Could not find method ndk 十、 Your project contains C++ files but it is not using a supported native build system 十一、 十二、 十四、自动导入包名 十五、 用AS直接连接到手机上能运行,安装apk就运行报错? 十六、更改版本号 十七、在cocos中 用 android studio调试 c++ 十八、 Manifest中使用${applicationId}写法 十九、android studio更改 applicationId 和更改 包名package name 二十、关闭 Android Studio 新特性Instant Run 下面是正文 一、 mac下JDK的安装路径 二、android studio的编译命令 cocos compile -p android --android-studio 三

android MVP+retrofit模式例子

匿名 (未验证) 提交于 2019-12-03 00:22:01
MVP 特点 MVP 模式将Activity 中的业务逻辑全部分离出来,让Activity 只做 UI 逻辑的处理,所有跟Android API无关的业务逻辑由 Presenter 层来完成。 将业务处理分离出来后最明显的好处就是管理方便,但是缺点就是增加了代码量。 MVP 理论知识 在MVP 架构中跟MVC类似的是同样也分为三层。 Activity 和Fragment 视为View层,负责处理 UI。 Presenter 为业务处理层,既能调用UI逻辑,又能请求数据,该层为纯Java类,不涉及任何Android API。 Model 层中包含着具体的数据请求,数据源。 一张图看关系: 例子: /** * 接口封装类 */ public class LoginContract { // view层接口 public interface LoginView { public void onLoadSuccess(LoginResult result); public void onLoadFailed(String msg); } // model层接口 public interface LoginModel { void getLoginData(LoginRequest loginRequest, LoginOnLoadListener listener); } //

Android端身份证识别

匿名 (未验证) 提交于 2019-12-03 00:22:01
Android端身份证拍照识别 支持的系统和硬件版本 系统:支持 Android 4.0(API Level 15)到Android7.0(API Level 25)系统。需要开发者通过minSdkVersion来保证支持系统的检测。 CPU架构:armeabi,arm64-v8a,armeabi-v7a,x86 机型:手机和平板皆可 硬件要求:要求设备上有相机模块。 网络:支持WIFI及移动网络,移动网络支持使用NET网关及WAP网关(CMWAP、CTWAP、UNIWAP、3GWAP)。 集成SDK 1.前往百度开发平台文字识别SDK下载页面下载Android SDK压缩包。 2.(必须)将下载包libs目录中的ocr-sdk.jar文件拷贝到工程libs目录中,并加入工程依赖。 3.(必须)将libs目录下armeabi,arm64-v8a,armeabi-v7a,x86文件夹按需添加到android studio工程src/main/jniLibs目录中。 添加必要的权限 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name=

电量优化wakelock

匿名 (未验证) 提交于 2019-12-03 00:22:01
WakeLock锁 wake_lock锁主要是相对系统的休眠而言的,意思就是我的程序给CPU加了这个锁那系统就不会休眠了,这样做的目的是为了全力配合我们程序的运行。有的情况如果不这么做就会出现一些问题,比如微信等及时通讯的心跳包会在熄屏不久后停止网络访问等问题。所以微信里面是有大量使用到了wake_lock锁。。 wake_loc:两种锁,一种计数锁;非计数锁(锁了很多次,只需要release一次就可以解除了)。源码:count++ 。。 电量优化使用时出现的错误: 1.json: unsupported value: NaN 有人用了描述: the problem started when reset the battery stats and enabled full-wake-history 解决:重启手机再试就好了。 2.打开生成的HTML显示错误如下:WARNING: Visualizer disabled. If you see this message, download the HTML then open it.解决:需要翻墙访问谷歌服务。 3.进部署好的动脑服务器docker,显示错误如下:{"UploadResponse":[{"sdkVersion":23," historianV2Cs...https://github.com/google/battery

Android开发之ApiCloud模块开发的注意事项

匿名 (未验证) 提交于 2019-12-03 00:18:01
经过本人多次模块制作打包上传基本总结模块开发的以下坑: 一.模块开发SDK最小版本必须为9,不然就算你SDK模块开发完毕正常运行你在后台云编译也无法通过会报错,提示 minSdkVersion9小于你模块里面的版本。 二.当你模块中有多个arr包可以按照官方文档将多个arr包放入目录也可以自己将arr包解压将里面的jar包好用so库等复制出来放到你的模块开发的模块库中进行引用也可以。 三.官方的so库有两种 armeabi-v7a和 armeabi如下图: 如果你的库中带有so库那么你的模块包里面最少也得有两种架构如下图: 如果你的SDK模块在SDK里面编译成功也可以成功运行但是模块大伯上传到自定义模块后调用出现so库找不到如下: couldn't find "libc++_shared.so 你可以通过以上方法复制整 个 armeabi包里面的so库文件到 armeabi-v7a里面即可 四.如果你只打包上传 armeabi-v7a里面的so库在你云编译的时候你的so库是不会被编译到apk里面的,但是如果你的so库的 armeabi包打包进去才会被编译到apk里面去如下图: 1.包含 armeabi里面的so库的apk大小 2.不 包含 armeabi里面的so库的apk大小 文章来源: Android开发之ApiCloud模块开发的注意事项

Android NDK Couldn&apos;t load indLibrary

匆匆过客 提交于 2019-12-02 21:47:44
前言: 1. so加载失败的常规原因是so未放到正确路径, 一般新手会遇到。如果你是新手, 查看常规解决方式: http://blog.csdn.net/yy1300326388/article/details/46291417 2. 本文适合已经Google多次, 且确定所有so路径正确, 但是还是报错没加载到so的无厘头bug情况. 本文所有内容均针对该情况进行描述. 其他情况就擅用搜索吧. 详细描述: 如果你遇到的情况是[2], 可能就是你最新 添加的依赖项目中可能包含多种架构支持 , 比如"arm-v8", "armeabi", "armeabi-v7a", "x86", "mips", 但是你的app中只有部分架构支持"armeabi"; 如果你此刻运行在"arm-v8"的手机上肯定就报错了, 因为你的apk中其实有了"arm-v8"目录, 但是里面没有对应的so. 找到你的apk文件, 用apktool解包, 找到你的so目录, 就会发现有多个目录, 但是里面的so数目不一样, 有些目录缺少个别so. 解决方法: 在项目的build.gradle中指定需要兼容的架构, 代码如下: defaultConfig { ndk { abiFilters "armeabi", "armeabi-v7a", "x86" } } 加了这个后再次编译成apk,

ubuntu下编译vlc-android源代码

旧时模样 提交于 2019-12-02 19:33:17
一、安装所有必需的软件 1, # sudo apt-get install ant autoconf automake autopoint libtoo lgawk gcc g++pkg-config cmake patch subversion git Ant工具在最后编译android源码生成apk文件会用到,所以需要安装。如果手动安装了ant,需要在环境变量中配置好ant的 path,或者在进行编译之前在命令行执行export PATH=$PATH:/xxx/ant/bin,保证可以在执行编译的命令行中执行ant命令即可。 2, 除了以上软件/工具之外,还有两个必须的工具,就是Android的SDK和NDK。SDK和NDK的安装方法就不再详述了,网上有很多安装方法的文章。 二、环境变量配置 配置ANDROID_SDK # export ANDROID_SDK=/path/to/android-sdk(请把path改为自己的路径) 配置ANDROID_NDK # export ANDROID_NDK=/path/to/android-ndk 配置PATH变量 # export PATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools 配置NEON相关信息(一般编译的时候,会编译NO_NEON和支持NEON两种包出来) #

Go 和 Android 集成实战

狂风中的少年 提交于 2019-12-02 17:45:47
看到这个标题,你可能会问,为什么要在 Android 中运行 Go,直接使用 Java 不挺好吗? 是的,如果你有现成很强大的 Java 团队,这没有问题,但并不是所有团队都是如此。而且我在这里想强调的是 Android 与 Go 的集合,即在 Android 程序中使用 Go 而不是完全用 Go 来写 Android 程序。 我能想到在 Android 中用 Go 的一些原因: 团队熟悉 Go, 对 Java/Android 了解不多。 已经有现成的 Go 核心代码,比如开源类库: libp2p,turn/stun 类库等。 自己服务的 SDK 其核心逻辑复杂,繁琐,涉及大量网络或并发的操作。 能够在 Android 上使用 Go 代码,得益于 Go 强大的交叉编译能力,那该如何在 Android 上使用我们的 Go 库呢,接下来我将通过一个简单的示例来讲解。 实例教程 本例是在 Android 程序中使用 Go 编译的一个简单动态库来实现对网站测速的简单例子。 思路: Go 交叉编译为 Android 平台支持的 so 文件。 在 Android 中使用 JNA 调用该 so 文件。 依赖: Go NDK r20 JNA 5.4.0 说明: 演示环境为 Mac。 编写 Go 测试代码 编写 speedtester 的核心代码,实现对任意网站访问速度的检测: package