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"

  

 

posted @ 2024-08-27 11:38  X-Wolf  阅读(10)  评论(0编辑  收藏  举报