[ BLE 智能手环 ] [ 4 ] Android 开发环境搭建

背景

CC2541 设置好开发板程序后,需要在 Android 端进行信号的接收和发送,因此有必要对手机应用程序进行开发。Android 应用程序常用开发工具有 Eclipse 和 Android Studio 两种,了解到 Eclipse 目前已不再支持 Android 开发

Eclipse supports a rich selection of extensions, adding support for Python via PyDev, Android development via Google's ADT (superseded by Android Studio since 2015)

故采用 Android Studio 来完成相关操作。

问题

一、Plugin [id: 'com.android.application', version: '8.5.1', apply: false] was not found in any of the following sources

Build file 'C:\Users\Rainbow\AndroidStudioProjects\MyApplication\build.gradle.kts' line: 2

Plugin [id: 'com.android.application', version: '8.5.1', apply: false] was not found in any of the following sources:

* Try:
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

* Exception is:
org.gradle.api.plugins.UnknownPluginException: Plugin [id: 'com.android.application', version: '8.5.1', apply: false] was not found in any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (could not resolve plugin artifact 'com.android.application:com.android.application.gradle.plugin:8.5.1')
  Searched in the following repositories:
    Gradle Central Plugin Repository
    Google
    MavenRepo
	at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.resolveToFoundResult(DefaultPluginRequestApplicator.java:275)
	at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.lambda$resolvePluginRequests$3(DefaultPluginRequestApplicator.java:200)
	at org.gradle.util.internal.CollectionUtils.collect(CollectionUtils.java:212)
	at org.gradle.util.internal.CollectionUtils.collect(CollectionUtils.java:206)
	at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.resolvePluginRequests(DefaultPluginRequestApplicator.java:198)
	at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.resolvePluginRequests(DefaultPluginRequestApplicator.java:114)
	at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugins(DefaultPluginRequestApplicator.java:103)
	at org.gradle.kotlin.dsl.provider.PluginRequestsHandler.handle(PluginRequestsHandler.kt:44)
	at org.gradle.kotlin.dsl.provider.StandardKotlinScriptEvaluator$InterpreterHost.applyPluginsTo(KotlinScriptEvaluator.kt:216)
	at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost.applyPluginsTo(Interpreter.kt:385)

在这里找到了问题的解决方案:

https://issuetracker.google.com/issues/239471023?pli=1

https://stackoverflow.com/questions/36710267/how-to-use-socks-with-gradle-for-dependency-resolving-in-command-line

https://zyyme.com/2137.html

原因分析:gradle 使用的代理默认是 http 和 https,而本地使用的是 socks 代理,导致网络无法连接问题。

解决方案:

1. 关闭 Android studio 代理

image.png

2. 将 gradle 代理设置成 socks 代理

image.png

3. 使用国内 gradle 镜像

image.png

Gradle 介绍

Android Studio 使用 Gradle 作为编译构建工具。Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建工具。

image.png

允许灵活地自定义生成配置,每一个构建配置都可以定义自己的代码和资源集。一个典型的安卓应用程序模块的生成过程如图所示:

image.png

  1. 编译器将源代码转换为 DEX 文件。
  2. APK 打包将 DEX 文件和编译资源编译成一个单一的 APK 文件,在真正使用文件前,需要对其进行签名。
  3. APK 文件的签名可以使用调试或发布密钥库。
  4. 在最终生成 APK 前,使用 zipalign 工具来优化应用程序,使其在设备上运行时占用较少内存。