作者:小红妹
开发工具:Android studio
开发语言:Kotlin+Java
Gradle版本:gradle-7.5
大开眼界,Android竟然也可以写应用服务端了
前言
------最近公司有个大胆的需求,让Android端提供WebServer服务(需要写接口),把服务封装在一个本地应用中,供第三方调用,比如另外一个客户端调用,或者浏览器访问等等。
------啊这!安卓可以写后端吗?以前想都没想过这种场景,后端一般都是有后端开发人员写,使用Java、PHP或C#等等,Android?能吗?好风凭借力,利用第三方插件,也可以起飞~
------突然发现,自己对网络协议这块很懵懂,什么HTTP、TCP、三次握手四次挥手、WebSocket协议、网口通信、IP地址和网口等等,晕~
能咋搞,学起来~
集成
使用AndServer搭建Android平台的Web服务器。
GitHub地址:https://github.com/yanzhenjie/AndServer/
使用指南:https://yanzhenjie.github.io/AndServer/
1、将插件添加到项目构建脚本中
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.yanzhenjie.andserver:plugin:2.1.11'
...
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
...
2、然后将AndServer依赖项添加到模块中
apply plugin: 'com.yanzhenjie.andserver'
...
dependencies {
implementation 'com.yanzhenjie.andserver:api:2.1.11'
annotationProcessor 'com.yanzhenjie.andserver:processor:2.1.11'
...
}
如果使用Kotlin,请用kapt替换annotationProcessor。
集成遇到的问题
使用Android studio最新版本,gradle-7.5版本,Kotlin语言,死活依赖不成功,gradle版本7以后,build.gradle发生了变化。下面是添加依赖的样子。
1、将插件添加到项目构建脚本中
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-android-extensions'
id 'kotlin-kapt'
id 'com.yanzhenjie.andserver'
}
...
2、然后将AndServer依赖项添加到模块中
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '7.4.1' apply false
id 'com.android.library' version '7.4.1' apply false
id 'org.jetbrains.kotlin.android' version '1.6.21' apply false
id 'com.yanzhenjie.andserver' version '2.1.11' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
...
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'com.yanzhenjie.andserver:api:2.1.11'
annotationProcessor 'com.yanzhenjie.andserver:processor:2.1.11'
}
一直依赖失败,报错误
Plugin [id: 'com.yanzhenjie.andserver'] was not found in any of the following sources:
Plugin [id: 'com.yanzhenjie.andserver', version: '2.1.11', apply: false] was not found in any of the following sources:
好吧!后面改用以前老项目集成,竟然可以了,各个版本都低,暂且拿老项目来改改使用
大家可以集成试试。
代码展示
1、AppConfig
import android.content.Context;
import com.yanzhenjie.andserver.annotation.Config;
import com.yanzhenjie.andserver.framework.config.Multipart;
import com.yanzhenjie.andserver.framework.config.WebConfig;
import com.yanzhenjie.andserver.framework.website.AssetsWebsite;
import java.io.File;
/**
* @author 小红妹
* @date 2023/2/24
* @email L2279833535@163.com
* @package com.youqian.paintingboard.web
* @describe
* @copyright
*/
@Config
public class AppConfig implements WebConfig {
@Override
public void onConfig(Context context, Delegate delegate) {
// 增加一个静态网站
delegate.addWebsite(new AssetsWebsite(context, "/web"));
// 自定义配置表单请求和文件上传的条件
delegate.setMultipart(Multipart.newBuilder()
.allFileMaxSize(1024 * 1024 * 20) // 单个请求上传文件总大小
.fileMaxSize(1024 * 1024 *