IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 之一 Android Studio 安装、配置等新手入门 + 百度地图定位 + 移动摇杆 的实现 -> 正文阅读

[移动开发]Android 之一 Android Studio 安装、配置等新手入门 + 百度地图定位 + 移动摇杆 的实现

缘起

??最新在玩一款 VR 游戏:一起来捉妖。这款游戏是使用地图进行游戏的。无奈网上找了各种工具,要么付费,要么不好使。想想自己就是个程序猿,于是乎绝对自己开发一个。

??其实,这篇文章很早就在博客的草稿箱中,不知为何 CSDN 一直审核不过。提交审核也没有显示审核不过的具体原因!文章就是一个分享我的一个安卓开发经历,没有啥违规吧!?怪哉,怪哉!

初识 Android Studio

??作为一名嵌入式软件工程师,对于移动开发可以说知之甚少,于是乎各种 Google 搜索补课。经过了解,Android 开发最开始使用 Eclipse + ADT,后来在 Android 官网找到一篇博客说,Google 将结束对 Eclipse + ADT 的开发以及停止支持,把重心完全转移到Android Studio。那我就从 Android Studio。

??其实,在 Android Studio 刚发布的时候,我就了解过这个 IDE。当初听说谷歌发布了新的开发工具,出于好奇就下载了看了看。只是本人并不是做安卓开发的,安装后还要从谷歌下载一堆东西,感觉好麻烦也就没有做太多的了解。如今还是得继续学习一下。

??由于我也是个移动开发的外行,因此本文并不会系统说明如何进行 Android 开发,当然,我也没有这个能力。所以,以下文章就是记录我第一次搞 APP 的一些记录。记录一下我遇到的问题及处理方法。还有就是,由于是初学,往往是一旦有问题就需要各种头脑风暴,一不留神就跑没影了!!!

头脑风暴: 头脑风暴这个方法是怎么来的?谁创建的?

头脑风暴: Google 最近又搞了一个 Fuchsia OS,目前用途还不详,先去了解一下!

安装

??安装很简单,下载安装包,直接一路下一步即可!貌似 Windows 的一个最大的优点就是软件安装可以一路下一步,很少要考虑各种使用命令行从各种软件仓库进行安装!

??根据我这段时间的使用,Android 每次更新都可能出现一些列的问题,我们很有必要重点关注以下地址的内容:https://developer.android.google.cn/studio/releases

头脑风暴: Python 软件仓库?Node.js 软件仓库?Nuget 软件仓库?Linux 发行版的软件仓库?

配置

??这里所谓的配置主要是指更改 Android Studio 下载的各种文件的位置。如果我们不进行配置,Android Studio 会把我们需要的各种文件都放到系统盘的用户目录下。其中很多内容都会占用大量存储空间,而我之前装系统时分配的系统盘只有 100G,目前空间比较紧张(现在的开发工具是真的占空间,Visual Studio、Android Studio 就占了好几个 G,还没算他们下载的各种 SDK 和 工具),因此我选择将这些下载的内容放到一个指定的目录下。

  1. 修改默认的 Android Studio 的配置文件及其使用的各种配套工具的位置
    1. .android:这个文件夹里会有模拟(AVD,Android Virtual Device Manager)的相关文件,空间还是很大的。
      在这里插入图片描述
      这个需要直接建立环境变量,如下图所示:在这里插入图片描述

    2. .AndroidStudio:这个文件夹是 Android Studio 的配置文件夹,主要存放一些AndroidStudio设置和插件和项目的缓存信息
      在这里插入图片描述
      这里的修改需要直接修改 Android Studio 安装目录下的配置文件:idea.properties,如下图所示: 在这里插入图片描述

      注意: 在后续 Android Studio 版本升级时,默认会覆盖该文件,所以,升级后需要重新修改该文件!!否则,导致 Android Studio 在升级后的第一次启动会提示找不到相关文件。

    3. .gradle:这个文件夹是构建工具 Gradle 的配置文件夹,也会存储一些项目的构建缓存信息,如下所示:
      在这里插入图片描述
      打开 Android Studio,菜单:File->Settings,如下图所示的对话框中进行修改
      在这里插入图片描述 2. 修改下载的 Android SDK 的位置。这个直接在下载 SDK 时指定位置即可。在这里插入图片描述

Android SDK

??要使用 Android Studio 进行 APP 的开发,必须先下载对应的 Android SDK 及配套的 SDK 工具。具体方法是:File -> Settings,如下图所示的位置选择需要的 SDK 及工具:
在这里插入图片描述

Gradle

??Android Studio 构建 APP 时,还需要使用 Gradle。大体了解了一下,就是一个构建工具。估计和 CMake 之类的类似吧!但是不知道为啥,这个玩意下载也是贼慢!解决方法可以直接从网上自己下载,然后放到 Android Studio 对应的下载目录下。 但是需要注意对应的文件夹名字!

??Gradle 不止下载慢的一批,编译一个 APP 也是够慢的!而且每次升级 Android 版本都要同步更新 Gradle 插件版本以及 Gradle 版本。下图是 Google 官方给出的两者的对应关系
在这里插入图片描述
其实不止上面他俩有版本的对应关系,他俩与 Android Studio 的版本也有对应关系。

头脑风暴: Gradle、Cmake、Xmake、Makelist 这些有啥区别和联系。

Android Studio 的项目

??学习的第一步当然是建立一个默认的项目,看看它是怎么管理项目的。打开 Android Studio 建立第一个项目,主界面菜单内容是真多,看的眼花缭乱。
??接下来就是是各种 Google 搜索,了解 Android Studio 基本的使用方法。经过了解 Android Studio 中项目的基本结构大体就是下面这样了:
在这里插入图片描述
其中还有好多内容,后面慢慢了解。

说实话,百度的搜索结果真是一言难尽。Google 的第一个大多数就是解决方法,百度却是广告等一堆没用的。

Java SDK

??根据我的了解,Android 的开发其实是可以用很多种开发语言的。其中就可以直接使用 C / C++ 来开发 APP,使用 C / C++ 需要在 Android SDK 中下载 NDK,现在叫 NDK(Side by side)。但是,网上直接使用 C / C++ 来开发的示例、介绍文章比较少,无异于增加了我的开发难度,因此果断放弃。

??后来,JetBrains 开发了一门兼容 Java 的新的开发语言 Kotlin。随着 Google 和 Oracle 的官司不断, Google 果断宣布将 Kotlin 作为 Android 的官方开发语言。但是,虽然说与 Java 100% 兼容,但是,好多语法都有变化,对于我来说学起来还是有些费劲的,而且,目前 Kotlin 的 APP 还不是很多(在我搞这个 APP 的时候,Kotlin 刚出没多久),因此,放弃使用 Kotlin。

??最后决定采用 Java 进行 APP 的开发。Android APP 开发需要安装 Java SDK。同样,我对于 Java 并不了解,平时基本只用 C / C++,偶尔会用 C# 或者 Qt 开发一些小工具来辅助自己的开发工作。于是乎又是各种 Google 搜索 Java 与 Android 关系的资料。以下 3 点介绍取自于知乎网友(https://zhuanlan.zhihu.com/p/378582001):

  1. Java SE(Java Platform,Standard Edition):Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。
  2. Java EE(Java Platform,Enterprise Edition):这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。
  3. Java ME(Java Platform,Micro Edition):这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。

头脑风暴: Java vm 与 Android Dalvik 有啥区别与联系

??在安装 Java SDK 时我也遇到了一个大坑。一开始决定使用 Java 之后,就先去 Oracle 官网下载 Java SDK,结果直接下载了最新的 Java SE 16,然后编译用 Android Studio 建立的示例程序都是各种错误。。。后来才知道,每一个 Android 版本都对应一个 Java 版本,必须配合使用。

??目前,Android APP 的开发绝大部分还在使用 Java 8,部分开始过度到 Java 11。于是又下载了 Java 8 安装,为了担心有其他影响,我直接卸载了 Java 16,此时,终于可以正常编译一些示例 APP 了。后来了解到了一些 Java 11 的语法改进感觉挺好,Android 开发也开始支持 Java 11 了,于是又下载 Java SE 11 进行了安装(同时保留了Java 8),在 APP 开发中,指定使用了 Java 11。

定位 APP

原理

大体了解了一下定位 APP 的开发原理。无非就是以下四个:

  1. 自己编译安卓系统,然后适配各手机,为所欲为!
  2. 获取 ROOT 权限,然后使用 xposed 拦截定位相关的 API,篡改定位数据。
  3. 使用 VirtualAPP、太极之类的的虚拟环境,虚拟一个设备,在里面虚拟环境中为所欲为!
  4. 使用 Android 提供的测试 API 进行修改

四种方法的难易程度也是依次降低的!

  • 第一种:一般人就别想了,不一般人也别想了!
  • 第二种:现在最新的 Android 手机厂商都已经限制 ROOT 权限了,难度越来越大!
  • 第三种:VirtualAPP 目前由开源转为了收发模式,原来的开源版不再支持最新的 Android 10。收费版倒是很不错!太极修改定位仍然需要 ROOT 权限
  • 第四种:难度最简单

头脑风暴: 最近有网友分析了最新版的 VirtualAPP 源代码,已经可以支持 Android 11 了,是时候再去好一波羊毛了。用不用先不管,先把分析的源码保存到自己的仓库再说。

??知道了上面的实现原理接下来就是开始搞了。从头开始貌似有些难啊!抓紧去开源社区找了找。发现了不少大佬开源了一些实现方法,只是功能都不完善,仅仅是介绍了如何使用而已!在此,先感谢下面的这个几个网友:

  1. https://github.com/Hilaver/MockGPS
  2. https://github.com/bxxfighting/together-go
  3. https://github.com/P72B/Mocklation

示例不仅仅以上几个,还有很多这里就不列举了。参照以上的示例,新建工程,开始一点点写代码内容!

头脑风暴: 国内基本搜不到相关示例,再去国外找几个抄一抄吧!

百度地图

??开发初期,纠结到底是使用百度地图,还是高德地图,还是腾讯地图,在参考了各种示例之后,绝对采用百度地图。使用百度地图开发,开发者在使用 SDK 之前需要获取百度地图移动版开发密钥(AK),该 AK 与百度账户相关联。百度官网有详细的步骤:https://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-project/ak。参照步骤一步一步来即可。其中有个比较麻烦的就是要获取签名信息!Android APP 必须要有签名才可以发布。这个得专门一个章节来说。

头脑风暴: 百度地图会不会自动给我弹出广告,让我去莆田系看病!要不要竞价才能使用地图的全部功能?

头脑风暴: 我的 APP 的秘钥指纹都在百度登记了,我的位置不就是直接暴露给它了?它会不会拿我的位置做大数据分析,然后有针对性的推送广告?

头脑风暴: 得去了解一下高德和腾讯是不是也是同样的使用套路

初始化百度地图

??从权限的配置开始,到地图的初始化,官网有很详细的步骤:https://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-map/showmap,我就是按照这个步骤来搞的。
在这里插入图片描述

初始化定位

??刚开始比较纳闷,百度地图 SDK 和 百度定位 SDK 不是一个东西么?后来经过了解才知道,百度地图是由地图和定位两部分组成的,地图负责呈现我们看到的地图,定位负责是地图上显示的位置。
在这里插入图片描述
??定位 SDK 的初始化配置,官网也有详细步骤:https://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-map/location,安装这个步骤操作即可。

摇杆的实现

??关于游戏摇杆,网上有很多网友搞了示例,有的设置做成了库,以供大家使用。我当初也搜集了很多摇杆的实现,但是没有一个是符合我需求的。无奈只能参考各位网友的代码,自己实现了一个:
在这里插入图片描述
摇杆由两部分组成:方向控制部分 + 功能按钮部分。其中的方向控制部分我目前实现了两种:按钮和圆形,。可以根据喜好选择使用哪一种来使用(APP 设置中添加了一个设置项)。

??按键方向控制使用了 layout 布局来搞,圆形方向控制则直接使用代码来绘制的,目前还不会(也不知道能不能)直接通过 layout 布局来实现。
在这里插入图片描述
??最开始,我先实现了一个按钮方向控制,因为这种比较简单,每个按钮一个点击事件,负责处理方向。在实际使用中,发现方向的控制不够灵活,只能固定的方向,而后有搞了后面这个圆形的方向控制,方向根据角度自动计算,这样就可以灵活的处理各种方向了。

??最后再用一个类处理这两种类型的方向控制以及摇杆的功能按钮就可以了。这个类就用到了 Android 的悬浮窗的设置。同时,要使用悬浮窗必须还要请求权限。
在这里插入图片描述

LOG 记录

??第一次写 Android APP,问题一大堆,总是时不时有崩溃!最开始,在我的华为手机上用的好好的,结果后来换了个小米,安装、打开、闪退。。。一上来就凉凉崩溃了。。。一搜索才知道,国内这些手机厂商推出的安卓都是自己瞎胡搞的,APP 需要适配各家的手机系统!!!我就一个摔坏的华为,一个屌丝小米。。。

??在了解的过程中,发现有许多现成的日志库,可以实时记录 APP 的运行状态,如果出现了问题,就可以从日志中查找原因。于是又是各种 Google,发现还真不少:Logger、xlog、微信Mars-xlog、Klog 等等。

??直接查看各个日志库的手册,看看哪个用起来最简单,哪个更新比较活跃。最终经过一份对比,我选择了 xlog 来记录 APP 中的各种信息。配置一下就可以直接在所有文件中直接调用了:
在这里插入图片描述
??其实最开始我看好多人分享的代码中,经常有 log.ilog.elog.d 等这些东西,后来经过了解才知道,这个其实是 Android 官方提供的 Log 库,我们可以用它来输出很多调试信息。只不过,这个有些简陋,很多人就搞了一些功能更强大的日志库。

开中的问题

Compatible side by side NDK version was not found.

??这个是由于默认没有安装 NDK,Android Studio 给出的一个提示,项目不使用 NDK 其实没啥影响。强迫症患者,可以考虑安装 NDK。
??具体:菜单 Tools --> System Settings --> SDK manager–> Android SDK–> SDK tools–> show package detail -->找到 NDK(side by side) ,下载并安装即可。
在这里插入图片描述

NDK was located by using ndk.dir property.

??Build 的时候提示如下的警告:NDK was located by using ndk.dir property. This method is deprecated and will be removed in a future release. Please delete ndk.dir from local.properties and set android.ndkVersion to [21.3.6528147] in all native modules in the project. https://developer.android.com/r/studio-ui/ndk-dir。我记得 Google 在刚推出 Android Studio 时, NDK 的结构并不是现在这个样子。后来 Google 对 NDK 进行了一次大的更新!这个可以在 Android 官方文档中找到。

英文说得很明白,使用 ndk.dir 指定 NDK 的位置的方法过时了,推荐下面的方法:
在这里插入图片描述
注意:如果有多个模块(Module),则每个模块都需要单独添加!

Note: Recompile with -Xlint:deprecation for details.

在编译项目的时候,总是会出现如下的警告:
在这里插入图片描述
上面的这两句话说的很明白,这个问题是由于我们的源码中使用了一些已经过时的API。详细信息可以使用 -Xlint:deprecation 参数来查看。那么具体咋么用呢?如下:

项目的 build.gradle 文件中加入:

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
}

然后重新编译我们的源码,我们就可以查看到底用了哪些过时的 API 的详细信息
在这里插入图片描述
注意:以上的提示在中文系统中是乱码:
在这里插入图片描述
解决方法:
在这里插入图片描述

No version of NDK matched the requested version 21.0.6113669. Versions available locally: 21.3.6528147

??最近项目升级了最新的 Gradle 插件 classpath 'com.android.tools.build:gradle:4.0.1',在编译项目的的时候出现了如下错误:
在这里插入图片描述
项目并没有使用 NDK,不知道是不是与百度地图的 SDK 中的 .so 文件有关系。解决方法:

  1. 根据上面的提示,选择安装 NDK 21.0.6113669 这个版本,重新编译 APP。
  2. 修改 android/app/build.gradle 文件中配置
     android {
         ndkVersion '21.3.6528147'
     }
    
  3. 如下配置项目使用的 NDK:
    在这里插入图片描述
  4. 在系统环境变量中配置 ANDROID_NDK_HOME。这样 Android Studio 就会默认使用 ANDROID_NDK_HOME 指定的 NDK

未完待续…

参考

互联网

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 09:28:21  更:2021-08-29 09:30:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 6:11:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码