# android-vue
**Repository Path**: GoFireStar/android-vue
## Basic Information
- **Project Name**: android-vue
- **Description**: 用vue来创建界面,使用webview承载页面,通过反射实现请求数据
用vue来创建界面,使用webview承载页面,通过反射实现请求数据,
【当前已不再推荐使用】,建议直接上手这个项目Android-proxy (https://gitee.com/jpw_code/android-proxy)
- **Primary Language**: Android
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 7
- **Created**: 2024-05-29
- **Last Updated**: 2024-05-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# android-vue
#### 效果图
#### 介绍
用vue来创建界面,使用webview承载页面,通过反射实现请求数据
#### 软件架构
软件架构说明,使用android webview 承载vue页面,在vue页面请求通过webView调用js方法,通过反射执行请求,并返回结果。
#### 安装教程
1. 复制或下载项目
2. 使用android studio打开项目
3. 使用命令行运行vue项目项目
4. 修改使用参数查看结果
5. 修改配置参数打包vue项目打包成apk
#### 使用说明
1. 下载项目
2. 打开项目的vue目录,使用命令执行行` npm i` 命令初始化vue项目
3. 在android stuido 中打开项目
4. 在`com.panvan.app.Config`类中修改配置参数
5. 当使用运行调试时,将`APK=false`;当打包时反之(`注`打包前请先使用`npm run build`打包vue项目,之后在打包`APK`)
6. 在修改`APK`之后修改`getWebIndexUrl()`方法中的返回值,根据实际情况进行修改。如果使用手机调试请修改成`http://ip地址:端口号`,如果使用androi stuido 自带模拟器则需要修改成对应的ip(`10.0.2.2`根据实际情况修改);
7. 显示标题栏和显示状态栏,通过`showTitle`和`showStatusBar`进行控制
8. 如果修改整改项目的包名称,则一定需要修改`basePackages`参数
#### 整个项目包主要结构
```
|android-studio-app //存放android app基座的android studio 代码
|-app
|--src
|--main
|--assets //存放web页面
|++client.html //用来进行链接上线后的vue 页面,里边使用iframe src 进行链接
|--java
|--com.panvan.app //项目包
|--annotation //反射所需要的注解类
|--controller //(包名不可更改)请求控制类
|--entity //实体类
|--response //请求相应类
|--services //服务类
|--res
|vue-page //存放需要显示的vue web页面 。可使用不同的vue版本
|--public
|--src
|--api
|--assets
|--server
|--components
|--layout
|--route
|--server
|++android-proxy.js //关键脚本,用来支持通过webview 调用android 方法
...
|--store
|--utils
|--views
|++App.vue
|++android-vue.js //关键脚本,通过vue的注册方式进行注册,后只需要在main.js进行引入,即可使用相关android调用
|++defaultImportComp.js
|++main.js
```
#### 请求说明
##### 1.请求支持类型 (`更多的类型转换需要你的支持`)
|范围|类型|
|--|--|
|基本类型|`String`,`Boolean`,`Integer`,`Double`,`Float`,`Long`,`Byte`,`Short`,`Character`,`Date`(Date的各种格式支持需要在`Config`类中添加支持,可以将使用频率高的格式配置在数组最开始位置)|
|数组和集合| 数组如`Article []`(实体类数组) ,`String []` 字符串数组等其他类型;集合`List>`,`ArrayList>`|
##### 2.请求参数说明
> 目前的项目中有请求相关的示例
###### 2.1 测试请求类型
```java
package com.panvan.app.controller;
import com.panvan.app.annotation.AppAutowired;
import com.panvan.app.annotation.AppController;
import com.panvan.app.annotation.AppRequestMapper;
import com.panvan.app.annotation.AppRequestMethod;
import com.panvan.app.entity.Article;
import com.panvan.app.services.TestServices;
import java.util.Date;
import java.util.List;
@AppController(path = "test")
public class TestController {
/**
* 单字符串
*/
@AppRequestMapper(path = "/get6", method = AppRequestMethod.GET)
public String getTest6(String str) {
return str;
}
/**
* 多个参数
*/
@AppRequestMapper(path = "/get", method = AppRequestMethod.GET)
public String getTest(String str, int str2) {
return "这是修改后的字符串" + str + "," + str2;
}
/**
* 多个字符串返回数组
*/
@AppRequestMapper(path = "/get2", method = AppRequestMethod.GET)
public String[] getTest2(String str, int str2) {
return new String[]{"这是修改后的字符串", str, str2 + ""};
}
/**
* 多个参数和数组
*/
@AppRequestMapper(path = "/get3", method = AppRequestMethod.GET)
public String[] getTest3(String[] str, int str2) {
return new String[]{"这是修改后的字符串", "数组长度是:" + str.length, str2 + ""};
}
/**
* 实体类
*/
@AppRequestMapper(path = "/get4", method = AppRequestMethod.GET)
public Article getTest4(Article article) {
article.setUpdatedTime(new Date());
return article;
}
/**
* 集合,泛型为实体类 List
*/
@AppRequestMapper(path = "/get5", method = AppRequestMethod.GET)
public List getTest5(List articles) {
return articles;
}
/**
* 自动注入调用时实例化
*/
@AppAutowired
private TestServices testServices;
/**
* 测试自动注入实例化对象
*/
@AppRequestMapper(path = "/get7", method = AppRequestMethod.GET)
public String getTest7() {
return testServices.getString();
}
}
```
###### 2.2各方法对应的vue请求示例
> 在请求方法中对请求类型和请求参数做了默认值处理,当`method`为假值时,默认请求为GET,当请求参数为`params`假值时,默认做''处理
```javascript
/**
* 单字符串。当有且仅有一个参数时,直接是参数值
*/
let res=this.$ano.requestSync('test/get6','get','张三');
/**
* 多个参数
*/
let res=this.$ano.requestSync('test/get','get',{str2: '2',str: 'html'});
/**
* 多个字符串返回数组
*/
let res=this.$ano.requestSync('test/get2','get',{str2: '2',str: 'html'});
/**
* 多个参数和数组
*/
let res=this.$ano.requestSync('test/get3','get',{
str2: '2',
str: ['html', '张某某']
});
/**
* 实体类
*/
let res=this.$ano.requestSync('test/get4','get', {
content: '这是文章内容',
id: '123',
image: 'imagess',
isDelete: '0',
createdBy: '1',
createdTime: new Date(),
updatedTime: '2014年02月08日',
title: '这是标题'
});
/**
* 集合,泛型为实体类 List
*/
let res=this.$ano.requestSync('test/get5','get', [{
content: '这是文章内容1',
id: '123',
image: 'imagess1',
isDelete: '0',
createdBy: '1',
createdTime: new Date(),
updatedTime: '2014年02月08日',
title: '这是标题'
}, {
content: '这是文章内容2',
id: '123',
image: 'imagess2',
isDelete: '1',
createdBy: '2',
createdTime: new Date(),
updatedTime: '2023年02月08日',
title: '这是标题3'
}]);
/**
* 测试自动注入实例化对象
*/
let res=this.$ano.requestSync('test/get7');
```
###### 2.3注解使
* `@AppController` 添加到`controller`包下的`类`上的注解
+ `path`表示请求路径
```java
package com.panvan.app.controller;
@AppController(path = "test")
public class TestController {
}
```
* `@AppRequestMapper` 添加到`controller`保险类的`方法`上的注解
+ `path`表示请求路径 ;`method`表示请求方式
```java
package com.panvan.app.controller;
@AppController(path = "test")
public class TestController {
/**
* 单字符串
*/
@AppRequestMapper(path = "/get6", method = AppRequestMethod.GET)
public String getTest6(String str) {
return str;
}
}
```
* `@AppAutowired` 在`controller`包下的申明变量时,有需要`实例化的对象变量`上
```java
package com.panvan.app.controller;
@AppController(path = "test")
public class TestController {
/**
* 自动注入调用时实例化
*/
@AppAutowired
private TestServices testServices;
}
```
#### 参与贡献
#### 特技