Android开发
开发工具Android Studio软件
官网地址:https://developer.android.google.cn/studio
# 项目构建工具介绍
Gradle和Maven都是Java项目的构建工具,但它们有一些区别:
1. 语法:Gradle使用Groovy语言进行编写,而Maven使用XML。Groovy更加灵活易读,XML更加严谨易于重用。
2. 性能:Gradle比Maven更加高效快速,因为它使用了增量构建模式,只会重新构建被更改的模块,而Maven则需要重新构建整个项目。
3. 插件:Gradle的插件生态更加丰富和现代化,而Maven的插件相对较为传统。此外,Gradle的插件可以非常容易地编写和定制,而Maven的插件相对繁琐。
4. 维护:Maven有比较成熟的工具链和文档支持,而Gradle则相对较新,可能需要更多的自学
# Groovy介绍
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码
开发流程:
安卓开发 = Java代码处理业务逻辑 + xml页面布局
[安装]
注意: 中间需要选择是否安装虚拟机(可以选择安装也可以不安装),如果使用真机调试,就不需要安卓虚拟机
[配置]
打开软件
可以选择自定义安装选择SDK的目录, 也可以常规安装让其自行选择一个目录
默认SDK路径:
例如:C:\Users\ML\AppData\Local\Android\Sdk
1) 不用设置代理 2) license Agreement 中对于每个都需要单独点选Accept, 最后再进行Finish 正常他会下载相关的组件并安装, 都完成之后,就正常打开软件 SDK管理配置: More Actions > SDK Manager 或 File > Settings > Android SDK SDK Platforms: a)安装Android API 35 b)安装Android 11.0 (根据自己手机的系统版本选择即可) SDK Tools: 3) emulator和paltform-tools目录加入到环境变量
[使用]
新建)
> 选择"Phone and Tablet" > Empty Views Activity 空视图页
填写 项目名 + 包名 + 项目位置 + 编辑语言(要选Java) + SDK版本(支持的最小的安装版本,可以选择10以上)
正常情况下会下载依赖包并安装完成了
真机运行)
前提: 手机开启开发者模式 & 允许USB调试,并且用数据线和电脑连接
目录结构说明:
安卓视图)
app |-- manifests |-- | -- AndroidManifest.xml (项目名称,图标,启动,权限配置等) |-- java |-- | -- com.lanlang.androiddemo (每个页面中的处理逻辑) |-- | -- | -- MainActivity ... |-- res (资源) |-- | -- drawable |-- | -- layout |-- | -- | -- activity_main.xml (xml页面) |-- | -- mipmap |-- | -- values |-- | -- xml (项目配置) Gradle Scripts: gradle的一些配置
项目视图)
AndroidDemo ├── .gradle #AndroidStudio 自动生成的文件,会自动修改它的,项目打包时也会删除; ├── .idea # AndroidStudio自动生成的文件,会自动修改它的,项目打包时也会删除; ├── app # 应用相关的东西都在里面,工作的核心目录 │ ├── build # 编译的产物。某些情况下,可以手动把它整个删掉。 │ ├── libs # 依赖包可以放这里,比如一些jar文件。 │ ├── src # 代码在这。非常重要。 │ │ ├── main │ │ │ ├── java # 放Java代码的地方 │ │ │ ├── res │ │ │ │ ├── drawable # 应用图标 │ │ │ │ ├── layout # Android布局文件夹 │ │ │ │ ├── mipmap # 适配不同分辨率的手机 │ │ │ │ ├── mipmap # 桌面图标 │ │ │ │ └── values # 颜色、样式、字符集配置文件夹 │ │ │ ├──AndroidManifest.xml#APP运行配置文件,用来配置权限:程序入口配置、应用程序主题、应用程序组件等 │ ├── .gitignore # 版本控制 │ ├── build.gradle # 非常重要,app的构建配置。俗称“app的gradle文件”。 │ └── proguard-rules.pro # 不管。这个是混淆配置。 ├── gradle # 它是一个构建起配置文件 ├── .gitignore # 整个工程的版本控制 ├── build.gradle # 很重要。项目级的配置。俗称“项目gradle文件” ├── gradle.properties # 全局的gradle配置文件 ├── gradlew # Linux/mac上执行gradle命令 ├── gradlew.bat # Windows上执行gradle命令 ├── local.properties # 本地配置文件,一般不上传 └── settings.gradle # gralde的项目级配置
开发
支持okhttp3:
在app > build.gradle文件中dependencies下添加依赖 implementation "com.squareup.okhttp3:okhttp:4.9.1"
基本使用:
// 构造请求 val okHttpClient = OkHttpClient() val request = Request.Builder().url("http://localhost:8080/").build() val call = okHttpClient.newCall(request) // 发起调用 val execute = call.execute() println(execute)
添加拦截器:
OkHttpClient httpClient = new OkHttpClient.Builder() .addInterceptor(new RetryInterceptor(3)) .addInterceptor(new CatInterceptor()) .addInterceptor(new TokenHeaderInterceptor()) .build();
序列化Gson:
在app > build.gradle文件中dependencies下添加依赖 implementation 'com.google.code.gson:gson:2.8.6'
使用:
// 序列化 LoginResponse okResponse = new LoginResponse(0, "登录成功"); String loginSuccessStr = new Gson().toJson(okResponse); System.out.println("登录成功:"+loginSuccessStr); // 反序列化 LoginResponse obj = new Gson().fromJson(dataString, LoginResponse.class); if (obj.code == 0) {...}
图片加载:
implementation 'com.github.bumptech.glide:glide:4.11.0'
数据存储
- 一般存储在xml或者sqlite3中
[xml]
# 1 新增 #登录成后,把token的值,存储到手机端的xml中---开始 SharedPreferences sp= getSharedPreferences("sp_token",MODE_PRIVATE); SharedPreferences.Editor edit=sp.edit(); edit.putString("token",r.token); edit.commit(); # 登录成后,把token的值,存储到手机端的xml中---结束 # 2 删除 # 删除xml中的值--开始 SharedPreferences sp1=getSharedPreferences("sp_token",MODE_PRIVATE); SharedPreferences.Editor edit=sp1.edit(); edit.remove("token"); edit.commit(); # 删除xml中的值--结束 # 3 获取 # 从xml中取出当时存放的token值----开始 SharedPreferences sp=getSharedPreferences("sp_token",MODE_PRIVATE); String token=sp.getString("token",""); Log.e("xxxxx",token); # 从xml中取出当时存放的token值----结束
存储位置:
# 保存到手机上:`/data/data/包名` adb shell su cd /data/data cd 包名 # cd com.lanlang.loginDemo cd shared_prefs # 保存过才有 ls cat sp_token.xml # 打印出xml中的值
使用参考:https://zhengw-tech.com/2024/06/29/okhttp-interceptor/
1)引入依赖
项目视图下, 找到app > build.gradle文件dependencies中引入okhttp3
dependencies { implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' implementation "com.squareup.okhttp3:okhttp:4.9.1" testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' }
2)在android视图下, 找到 app > manifests > AndroidManifest.xml文件中 application的上面加允许访问网络
<uses-permission android:name="android.permission.INTERNET"/>
3) 支持http
在res/xml下新建security.xml,写入
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
在AndroidManifest.xml文件中application中加入配置:
android:networkSecurityConfig="@xml/security"
retrofit介绍
retrofit是对okhttp的封装,底层基于okhttp3,也是一个发送网络请求的库,更简单一些
后续,有的app发送网络请求,使用okhttp3,有的app会使用retrofit
implementation "com.squareup.retrofit2:retrofit:2.9.0"
详细的使用: https://blog.51cto.com/u_15930680/5991226
其他操作:
1)转义.gradle目录文件
Android Studio的.gradle文件夹保存的是从网络中下载的 gradle 配置文件,每次更新 gradle 之后,就会有新的文件下载到该文件夹中
将.gradle文件夹转移到其他盘中
解决:配置环境变量 GRADLE_USER_HOME
默认.gradle文件夹的路径是C:\Users\登录名\.gradle目录,所以只需要在环境变量里面配置GRADLE_USER_HOME的值为其他盘就行了
变量名:GRADLE_USER_HOME
变量值:L:\WindowsWork\Android\.gradle
android studio中也需要设置下: Build Tools > Gradle 中的Gradle user home
常见错误:
1.java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by network security policy
这是因为正常需要使用https来请求的
解决:
(1)APP改用https请求
(2)targetSdkVersion 降到27以下
(3)更改网络安全配置
1.在res文件夹下创建一个xml文件夹,然后创建一个network_security_config.xml文件
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
2.接着,在AndroidManifest.xml文件下的application标签增加以下属性:
<application ... android:networkSecurityConfig="@xml/network_security_config" ... />
4) 在AndroidManifest.xml配置文件的<application>标签中直接插入
android:usesCleartextTraffic="true"