网络设计之xutils网络库

kotlin中使用 xUtils 是轻量级网络请求工具 kotlin中使用 xUtils 轻量级网络请求工具: xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(251K), 并且特性强大, 看看官网就知道了 git地址: https://github.com/Jay-YaoJie/xUtils3 项目中快速配置xUtils3 使用Gradle构建时添加一下依赖即可 // 最新的包引用可以... 阅读详情

xutils官方 这是xutils 官方

这是xutils 3 的 官方解释

xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(246K), 并且特性强大, 方便扩展:

稳定的基石: AbsTask和统一的回调接口Callback, 任何异常, 即使你的回调方法实现有异常都会进入onError, 任何情况下onFinished总会让你知道任务结束了.

基于高效稳定的orm工具, http模块得以更方便的实现cookie(支持domain, path, expiry等特性)和 缓存(支持Cache-Control, Last-Modified, ETag等特性)的支持.

有了强大的http及其下载缓存的支持, image模块的实现相当的简洁, 并且支持回收被view持有, 但被Mem Cache移除的图片, 减少页面回退时的闪烁..

view注解模块仅仅400多行代码却灵活的支持了各种View注入和事件绑定, 包括拥有多了方法的listener的支持.

其他特性

支持超大文件(超过2G)上传

更全面的http请求协议支持(11种谓词)

拥有更加灵活的ORM, 和greenDao一致的性能

更多的事件注解支持且不受混淆影响…

图片绑定支持gif(受系统兼容性影响, 部分gif文件只能静态显示), webp; 支持圆角, 圆形, 方形等裁剪, 支持自动旋转…

从3.5.0开始不再包含libwebpbackport.so, 需要在Android4.2以下设备兼容webp的请使用3.4.0版本.

使用Gradle构建时添加一下依赖即可:

compile’org.xutils:xutils:3.5.0’

看完这些你肯定会觉得很强大 这是一个很稳定的网络库 肯定会有很多人不理解 这是几年前的框架了 为什么还在研究这一块 ?

是啊 在相对日日迭代更新的时代 xutils 的是一个相对来说老一点的网络库 这也是和 okhttp reteofit和rxjava 等相对新一点的网络库而言的 utils 的最新版本是3.5.0 更新时间是一年前 时间间隔较久 不知道是否还有维护

说到这里 我们说一下xutils 的强大功能吧

xutils 3 以上官方已经介绍的很详细了 我就简单的说一下 主要的功能 主要就是四个模块

网络请求 这也是最主要的 我看中xutils的原因是两个 一是大文件上传下载速度很快 二是 可封装程度很高

(相当于okhttp)

注解 注解对我们来说能简化我们很多一些初始化试图和绑定数据的代码 (相当于Butterknife) android 原生的自定义注解是远远满足不了我们的需求的 自定义注解也会花费我们很多时间 所以为了简单方便一个好用的注解框架很有必要

绑定图片 xutils 支持绑定图片 例如 本地图片 网络图片 bitmap 和 资源文件图片等 都可以直接绑定 (相当于picasso) 当然他还可以设置图片的属性 例如圆角 透明度等

第四 也是一个很主要的功能 就是数据库 我们在项目中肯定会用到数据库进行数据存储 (相当于sqlite)

综上所述 你还觉得xutils 不强大吗 ?

我列个等式 再看一下

xutils = okhttp + Butterknife + picasso + sqlite;

没错就是这么强大 也许你以为有点老 但是功能这一块还是很牛x 的 兼容性这一块做的也很不错 至少在android 4.0-android 8.0 都能兼容到 至于9.0 现在还是未知 4.0以前也提供了兼容方案

好了 主要的介绍已经做完了 现在说说xutils 的 网络请求吧

选择第三方的框架 要根据自己的产品去选择 合适自己的才是最好的 这里我只是对xutils 3 的一些实用总结

首先我们要先将xutils 3 加入到我们的项目 老规矩介绍一下IDE —>AS

新建一个项目 XutilsDemo

项目结构如下
这里写图片描述

加入 xutils 3 

dependencies {

compile fileTree(dir:'libs',include: ['*.jar'])

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {

excludegroup:'com.android.support',module:'support-annotations'

    })

compile'com.android.support:appcompat-v7:25.+'

    compile'com.android.support.constraint:constraint-layout:1.0.2'

    compile'org.xutils:xutils:3.5.0'

    testCompile'junit:junit:4.12'

}

创建application 并注册

public class MyAppextends Application {

@Override

    public void onCreate() {

super.onCreate();

        x.Ext.init(this); // 初始化xutils

    }

}



    android:name=".MyApp"

    android:allowBackup="true"

    android:icon="@mipmap/ic_launcher"

    android:label="@string/app_name"

    android:roundIcon="@mipmap/ic_launcher_round"

    android:supportsRtl="true"

    android:theme="@style/AppThem

e”>

添加相关权限

uses-permission android:name=”android.permission.INTERNET”

uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”

好 已完成准备工作

简单的get请求

RequestParams request =new RequestParams("http.xxx");

x.http().get(request, new Callback.CommonCallback() {

@Override

    public void onSuccess(String result) {

}

@Override

    public void onError(Throwable ex, boolean isOnCallback) {

}

@Override

    public void onCancelled(CancelledException cex) {

}

@Override

    public void onFinished() {

}

});



简单的post请求 

RequestParams request =new RequestParams("http.xxx");

JSONObject object =new JSONObject();

try {

object.put("age",28);

    object.put("name","齐达内");

    object.put("event","回家了");

}catch (JSONException e) {

e.printStackTrace();

}

request.setBodyContent(object.toString());

x.http().post(request, new Callback.CommonCallback() {

@Override

    public void onSuccess(String result) {

}

@Override

    public void onError(Throwable ex, boolean isOnCallback) {

}

@Override

    public void onCancelled(CancelledException cex) {

}

@Override

    public void onFinished() {

}

});

简单的put请求

RequestParams request =new RequestParams("http.xxx");

JSONObject object =new JSONObject();

try {

object.put("age",28);

    object.put("name","齐达内");

    object.put("event","回家了");

}catch (JSONException e) {

e.printStackTrace();

}

request.setBodyContent(object.toString());

x.http().request(HttpMethod.PUT, request, new Callback.CommonCallback() {

@Override

    public void onSuccess(String result) {

}

@Override

    public void onError(Throwable ex, boolean isOnCallback) {

}

@Override

    public void onCancelled(CancelledException cex) {

}

@Override

    public void onFinished() {

}

});

简单的delet请求

RequestParams request =new RequestParams("http.xxx");

x.http().request(HttpMethod.DELETE, request, new Callback.CommonCallback() {

@Override

    public void onSuccess(String result) {

}

@Override

    public void onError(Throwable ex, boolean isOnCallback) {

}

@Override

    public void onCancelled(CancelledException cex) {

}

@Override

    public void onFinished() {

}

});

好下面就是对应我们的封装设计 根据项目需求 不要盲目跟风

一般情况下 get post put delete等等 都是固定的 后台会设计一些头参数 和 错误状态 等等 我们开始封装

新建一个XutilsHelper 

package com.nade.utils.xutilsdemo;

import org.json.JSONObject;

import org.xutils.common.Callback;

import org.xutils.http.HttpMethod;

import org.xutils.http.RequestParams;

import org.xutils.x;

/**

* 作者: Nade_S on 2018/7/9.

*/

public class XutilsHelper {

private static RequestParamsparams;

    /**

    * 获取请求体 设置头参数

    * @param url

    * @param type

    * @return

    */

    public static RequestParamsgetParams(String url,int type){

if (null ==params){

synchronized (XutilsHelper.class){

if (null ==params){

params =new RequestParams(url);

                }

}

}

return addHeader(params, type);

    }

/**

*

    * @param params 请求体

    * @param type 请求类型

    * @return

    */

    private static RequestParamsaddHeader(RequestParams params,int type) {

switch (type){

case 0:// 没有请求头

                break;

            case 1:// 请求格式 与 参数

                params.addHeader("Content-Type","application/json");

                params.addHeader("key","value");

                params.addHeader("key","value");

break;

            case 2:// 请求格式 与 参数

                params.addHeader("Content-Type","multipart/form-data");

                params.addHeader("key","value");

                params.addHeader("key","value");

                params.addHeader("key","value");

break;

            case 3:// 其他格式 根据后台设置即可

                params.addHeader("Content-Type","type");

                params.addHeader("key","value");

                params.addHeader("key","value");

                params.addHeader("key","value");

                params.addHeader("key","value");

                params.addHeader("key","value");

break;

            default:

params.addHeader("key","value");

                params.addHeader("key","value");

                params.addHeader("key","value");

                params.addHeader("key","value");

                params.addHeader("key","value");

break;

        }

return params;

    }

/**

    * get 方法

    * @param params

    * @param listener 监听

    */

    public static void XGET(RequestParams params, JSONObject object,final XutilsListener listener){

if (object==null){

params.addBodyParameter("params",object.toString());

        }

x.http().get(params, new Callback.CommonCallback() {

@Override

            public void onSuccess(String result) {

listener.xSuccess(result);

                // 此处可处理 服务器定义的内部错误

              // listener.xErrCode();

            }

@Override

            public void onError(Throwable ex, boolean isOnCallback) {

listener.xError(ex);

                // 此处可处理 服务器定义的外部错误

              //  listener.xErrCode();

            }

@Override

            public void onCancelled(CancelledException cex) {

}

@Override

            public void onFinished() {

}

});

    }

/**

    * post 方法

    * @param params

    * @param listener 监听

    */

    public static void XPOST(RequestParams params, JSONObject object,final XutilsListener listener){

if (object !=null){

params.setBodyContent(object.toString());

        }

x.http().post(params, new Callback.CommonCallback() {

@Override

            public void onSuccess(String result) {

listener.xSuccess(result);

                // 此处可处理 服务器定义的内部错误

                // listener.xErrCode();

            }

@Override

            public void onError(Throwable ex, boolean isOnCallback) {

listener.xError(ex);

                // 此处可处理 服务器定义的外部错误

                //  listener.xErrCode();

            }

@Override

            public void onCancelled(CancelledException cex) {

}

@Override

            public void onFinished() {

}

});

    }

/**

* put

    * @param params

    * @param listener 监听

    */

    public static void XPUT(RequestParams params, JSONObject object,final XutilsListener listener){

if (object !=null){

params.setBodyContent(object.toString());

        }

x.http().request(HttpMethod.PUT, params, new Callback.CommonCallback() {

@Override

            public void onSuccess(String result) {

listener.xSuccess(result);

                // 此处可处理 服务器定义的内部错误

                // listener.xErrCode();

            }

@Override

            public void onError(Throwable ex, boolean isOnCallback) {

listener.xError(ex);

                // 此处可处理 服务器定义的外部错误

                //  listener.xErrCode();

            }

@Override

            public void onCancelled(CancelledException cex) {

}

@Override

            public void onFinished() {

}

});

    }

/**

* delete

    * @param params

    * @param listener 监听

    */

    public static void XDELETE(RequestParams params, JSONObject object,final XutilsListener listener){

if (object!=null){

params.addBodyParameter("params",object.toString());

        }

x.http().request(HttpMethod.DELETE, params, new Callback.CommonCallback() {

@Override

            public void onSuccess(String result) {

listener.xSuccess(result);

                // 此处可处理 服务器定义的内部错误

                // listener.xErrCode();

            }

@Override

            public void onError(Throwable ex, boolean isOnCallback) {

listener.xError(ex);

                // 此处可处理 服务器定义的外部错误

                //  listener.xErrCode();

            }

@Override

            public void onCancelled(CancelledException cex) {

}

@Override

            public void onFinished() {

}

});

    }

}
@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    // mvc

    RequestParams params = XutilsHelper.getParams("url",Constant.XUTILS_NULLH);

    XutilsHelper.XGET(params, null,new XutilsListener() {

@Override

        public void xSuccess(String result) {

}

@Override

        public void xErrCode(int code) {

}

@Override

        public void xError(Throwable err) {

}

});

}

// mvp 使用

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    // mvp

    XutilsPresenter xutilsPresenter =new XutilsPresenter(this);

    xutilsPresenter.login();

}

@Override

public void loginSuccess(String result) {

Log.d("login", "loginSuccess: 登陆成功--"+result);

}

@Override

public void loginCode(int code) {

Log.d("login", "loginCode: 登录失败错误码--"+code);

}

@Override

public void loginError(Throwable ex) {

Log.d("login", "loginError: 登录失败--"+ex);

}

@Override

public void showPro() {

// 展示进度条

}

@Override

public void hintPro() {

// 隐藏进度条

}

好 本文就完结了 demo mvp 及源码 点击 点击下载demo

如有疑问 欢迎留言或私信

xUtils3.3.6: Android开发的全功能集成框架及实践指南 本文还有配套的精品资源,点击获取 简介:xUtils是由吴成锋开发的一个集成多种功能的开源Android框架,简化了Android应用的开发流程。xUtils3.3.6版本提供了全面的数据库操作、网络请求、图片加载、事件处理及混淆配置等功能。该框架通过提供 xutils-3.3.36.jar 文件实现包括但不限于: ORM数据库操作、多种HTTP请求支持、异步... 阅读详情

相关推荐

Xutils网络请求与图片处理实用指南

本文还有配套的精品资源,点击获取 简介:Xutils是一个在Android开发中实用的框架,支持网络请求、图片加载和处理等功能。本文详细讲解了Xutils中Post和Get网络请求的操作方法,以及如何加载和上传图片,并展示了如何将Bitmap对象转化为File。通过这些实例,Xutils的强大功能和简便使用被充分展现出来,有助于提升开发效率和用户体验。 1. Xu...

weixin_35732273的博客 1425

android:java.lang.NoClassDefFoundError: com.lidroid.xutils.HttpUtils 异常的解决

做项目练习的时候突然冒出了这个问题,而且前提是一个和xUtils毫不相关的业务,之前xUtils页面早就写好了,都没有问题,那么显然,这个和xUtils没有任何关系。 上网查了不少说明,解决办法都不太靠谱,NoClassDefFoundError有很多原因产生,所以解决其实非常复杂。。。 说一下思路和个人解决的过程。 错误截图 工程截图: java.lan

thoris的专栏 5311

Android代码-xUtils3

xUtils3简介 xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(246K), 并且特性强大, 方便扩展: 稳定的基石: AbsTask和统一的回调接口Callback, 任何异常, 即使你的回调方法实现有异常都会进入onError, 任何情况下onFinished总会让你知道任务结束了. 基于高效稳定的orm工具, http模块得以更方便的实现cookie(支持domain, path, expiry等特性)和 缓存(支持Cache-Control, Last-Modified, ETag等特性)的支持. 有了强大的http及其下载缓存的支持, image模块的实现相当的简洁, 并且支持回收被view持有, 但被Mem Cache移除的图片, 减少页面回退时的闪烁.. view注解模块仅仅400多行代码却灵活的支持了各种View注入和事件绑定, 包括拥有多了方法的listener的支持. 其他特性 支持超大文件(超过2G)上传 更全面的http请求协议支持(11种谓词) 拥有更加灵活的ORM, 和greenDao一致的性能 更

Xutil过时出现的HttpException:java.io,IoException:stack size 1036KB的异常

最近在做公司项目时,魅族的手机xutil网络请求时出现错误:HttpException:java.io,IoException:stack size 1036KB,是因为该手机是5.0的系统,xutils老的架包在这方面没有处理好,所以只要将xutils的新架包添加就可以了,新架包下载位置:点击打开链接     https://github.com/wyouflf/xUtils

yxl503248523的专栏 2060

RecycleView 实现复杂首页布局三种方式

RecycleView 实现复杂首页布局三种方式:嵌套、自定义布局管理器、三方控件。实现效果如淘宝,美团,bilibili等

SRS(简单实时视频服务) 笔记(5)- 视频录制

在SRS使用中实现视频录制功能。

irainsa的博客 1700

Android中FTP服务器、客户端搭建以及SwiFTP、ftp4j介绍

最近一段时间,因为公司项目的需要,对HTTP协议以及FTP协议都有所了解,并且在基于网络开放源代码 基础上,能够完成项目的要求。今天给大家分享下,怎样建立属于我们自己的FTP服务器以及FPT客户端,同时 非常非常感谢这些开源软件及其作者为IT行业做出的贡献,最大程度上至少解放了我们这些IT码农。且看正文。 本文主要内容: 1、FTP服务端部署---- 基于...

v5browser 1098

gesp c++ 五级知识点

gesp c++ 五级知识点

MMD.然大大 2009

java eofexception_【疑难杂症04】EOFException异常详解

最近线上的系统被检测出有错误日志,领导让我检查下问题,我就顺便了解了下这个异常。了解一个类,当然是先去看他的API,EOFException的API如下:通过这个API,我们可以得出以下信息:这是一个IO异常的子类,名字也是END OF FILE的缩写,当然也表示流的末尾它在表明一个信息,流已经到末尾了,而大部分做法是以特殊值的形式返回给我们,而不是抛异常也就是说这个异常是被主动抛出来的,而不是底...

weixin_35926446的博客 1278

YOLOV8多模态(可见光+红外光目标检测任务,基于Ultralytics官方代码实现)

torch 2.3.1 torchvision 0.18.1 Python 3.8.19 tensorrt 8.5.3.1DroneVehicle数据集下载地址DroneVehicle 数据集由无人机采集的 56,878 张图像组成,其中一半是 RGB 图像,其余是红外图像。我们为这 5 个类别制作了丰富的注释,其中包含定向边界框。其中,汽车在 RGB 图像中有 389,779 个注释,在

Mjy的博客 7585

做量化没有实时数据怎么行?我找到一个超级好用的Python库,速度还贼快!

今天咱们介绍了 pytdx 这个神奇的库,重点包括:✅ 安装 pytdx✅ 连接 TDX 服务器✅ 获取实时行情数据✅ 获取 K 线数据✅ 获取分笔成交数据总之,pytdx 是一个速度快、免费、易用的量化利器,适合 A 股量化交易的同学们使用。如果你还在为数据发愁,赶紧试试吧!🚀顺手再看就是对花姐最大的支持,期待你的关注。

奔跑的蜗牛 5726

android GET 请求在5.0版本的取不到数据,报IO异常兼容问题解决

使用lib类库xUtils-2.6.10.jar作为数据请求的框架,在android的5.0版会有兼容问题,取不到GET请求的数据。 但是POST没有问题,难取到数据。 public static ResponseContext invokeGet(String url, List<NameValuePair> headers) { ResponseConte...

weixin_30532837的博客 152

BLDC控制实验:方波、霍尔、开环、定速、正转

本文记录博主学习BLDC控制软件的过程。 文章目录1 概述2 软件架构及工具链2.1 软件架构2.2 工具链3 底层代码生成3.1 时钟配置3.2 按键输入配置 1 概述 本文是博主第一次做BLDC控制实验,目的仅仅是写代码让BLDC转起来,而暂时不考虑其他复杂的需求。 控制的方法是比较简单的六步换相法。利用电机内部的霍尔传感器,通过参考电机厂家给出的二二导通换相表,生成方波来控制电机。第一次实验为了简化需求,只考虑开环、定速、正转的情况: 开环:不考虑速度反馈,直接给PWM让电机转起来; 定速:不考虑速

u013288925的博客 1万+

Android xUtils3下载文件的使用

xUtils3简介   xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(246K), 并且特性强大, 方便扩展: 稳定的基石: AbsTask和统一的回调接口Callback, 任何异常, 即使你的回调方法实现有异常都会进入onError, 任何情况下onFinished总会让你知道任务结束了.

neuHenry 8585

【DaVinci Developer专题】-23-IDT高阶应用:结构体类型的数组

共8页 目录 1 创建一个Record IDT 2 创建一个Array IDT 3 创建一个S/R Port Interface 4 创建一个Constant 5 导入CFG生成代码的总结 6 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键字: 缩略语/术语 含义 DEV DaVinci Developer .

「汽车电子助手」的博客 1670

135、高通 ChromaTix 调优工具入门:参数含义、调优流程与效果对比

本文介绍了高通ChromaTix色彩调优工具的核心使用要点:1. ChromaTix是位于ISP管线中的色彩处理系统,核心任务是将原始色彩映射为符合人眼感知的"舒适"效果;2. 重点解析了饱和度、色调、亮度相关饱和度等关键参数的实际含义和调试陷阱;3. 分享了四步调优流程,强调需要基于多场景数据验证;4. 通过案例展示了参数调整带来的色彩改善效果;5. 总结了实用建议,包括保持单一变量调试、量化评估色差、关注极端场景表现等。文章指出ChromaTix调优是平衡不同场景需求的"妥协艺术",需要结合客观数据和主

sundong_81的博客 109

xutils3使用方法(很全面)

转载请注明出处:http://blog.youkuaiyun.com/tyk9999tyk/article/details/533060351.xUtils3简介以及文章更新更新 2017/03/30给表增加字段需求:我们需要在parent表中添加一个“username”字段。步骤:1.在parent类中添加“username”属性2.调用dbManager.addColumn(Parent.class,"u...

菜鸟的android晋级之路 6万+

CONN工具箱分析fmri数据笔记1

前言一、安装二、预处理三、去噪 前言 CONN:functional connectivity toolbox,是基于MATLAB和SPM的一个对功能磁共振数据进行分析的一个工具箱。可以进行以下分析: Seed-based correlations (SBC), ROI-to-ROI correlations, graph analyses, Independent component analyses(group-ICA), Masked (ICA) Amplitude of Low-Frequency.

weixin_52073820的博客 6587

android 开源框架xUtils

git地址:https://github.com/wyouflf/xUtils/ xUtils简介 xUtils 包含了很多实用的android工具。 xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls最低兼容android 2.2...

yihaoxue的博客 1084

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

XUtils获取网络数据

XUtils简介: xUtils是基于Afinal开发的目前功能比较完善的一个Android开源框架,官网:https://github.com/wyouflf/xUtils3 xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(246K), 并且特性强大, 方便扩展: 稳定的基石: AbsTask和统一的回调接口Callback, 任何异常, 即使你的...

qq_44946212的博客 434

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

XUtils简单操作

XUtils简介: xUtils是基于Afinal开发的目前功能比较完善的一个Android开源框架,官网:https://github.com/wyouflf/xUtils3 xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(246K), 并且特性强大, 方便扩展: 稳定的基石: AbsTask和统一的回调接口Callback, 任何异常, 即使你的...

weixin_43915921的博客 277

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

使用Android Studio时so文件打包不到APK中

1,需要在build中添加如下配置,这是必备的 Android {   sourceSets {       main {           jniLibs.srcDirs = ['libs']       }   }} 2,如果添加了该项配置出现了问题可能原因是引用了第三方包引起 比如我这边引用了xutils这个包,因为该包中也有一个.so的文件libwebpbackport.so,所以...

weixin_33924220的博客 1172

xUtils使用详细介绍

xUtils3使用详解 一、xUtils简介: xUtils是基于Afinal开发的目前功能比较完善的一个Android开源框架,官网:https://github.com/wyouflf/xUtils3 xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(246K), 并且特性强大, 方便扩展: 稳定的基石: AbsTask和统一的回调接口Ca...

weixin_30241919的博客 371

关于Android Studio .so文件打包不到APK中的原因

郁闷和困惑我了好几天的问题终于解决了,感觉像心里一块石头落地了,没解决之前,都想着是不是AS工具出现问题了,系统出现问题了,还是电脑有问题?各种原因都找了,功夫不负有心人,最后没办法,只能一行一行代码去看,最终找到了原因。 1,需要在build中添加如下配置,这是必备的 android {    sourceSets {        main {            jniLib

fhl13017599952的专栏 2万+

Android混淆步骤,混淆结果查看以及混淆后出现的问题和衍生问题

今天说说Android原生的混淆,原生项目即将上线,伴随着整体功能的完成和完善,一些涉及安全和自我保护以及优化的问题被提到日程上。混淆恰恰能解决的就是我们的APP代码的保护以及优化的问题。前言: 因为互联网环境的开放性和工具的便捷,我们很容易能将代码进行反编译以获取线上项目的源码。秉承对知识产权的尊重,我们在不侵犯他人权益的情况下,也需要对自己的劳动果实进行有效的保护,所以混淆能够帮助我们将自己的

听从内心的召唤 1万+

Android xUtils3网络框架

【代码】Android xUtils3网络框架。

2501_90225939的博客 144
上一篇: Android 开发之组件化环境搭建
下一篇: java 反射机制及动态代理
nades
博客等级 码龄10年 80粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值