练习源码 学习视频 参考资料

Process

2021/5/15~Now:学习Android Studio的使用

Notes

Introduction

TextView

Points

更改AVD默认路径

  1. 在想要存放的地方新建文件夹,假设命名为ADK
  2. 打开编辑系统环境变量并点击环境变量
  3. 新建一个系统变量
    • 变量名:ANDROID_SDK_HOME
    • 变量值:ADK文件夹的路径
  4. 在AndroidStudio中新建虚拟机即可

layout文件夹下创建子文件夹

只是创建文件夹而没有进行注册会报如下错误

URI is not registered (Settings | Languages & Frameworks | Schemas and DTDs)

解决方法如下

方法一

  1. 打开modulebuild.gradle文件并添加如下内容

所添加的代码在android内部

假设新建文件夹名为subLayoutTest

1
2
3
4
5
6
7
8
9
10
11
android {
sourceSets {
main {
res.srcDirs =
[
'src/main/res/layout/subLayoutTest',
'src/main/res'
]
}
}
}
  1. 同步 Sync now

方法二

  1. 打开modulebuild.gradle文件并添加如下内容

所添加的代码在android - buildTypes内部

假设新建文件夹名为subLayoutTest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
def listSubFile = {
def resFolder = 'src/main/res/layout'
def files = file(resFolder).listFiles()
def folders = []
files.each {
item -> folders.add(item.absolutePath)
}
folders.add(file(resFolder).parentFile.absolutePath)
return folders
}
}
  1. 同步 Sync now

解决Button属性background不生效的问题

打开res/values/路径下的 themes.xml文件

将其中

1
<style name="Theme.MyProjectName" parent="Theme.MaterialComponents.DayNight.DarkActionBar">

改为如下代码

1
<style name="Theme.MyProjectName" parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge" >

1
<style name="Theme.MyProjectName" parent="Theme.AppCompat.Light.DarkActionBar">

签名打包APK并安装到手机

  1. BuildGenerate Signed Bundle/APK
  2. 在下面窗口选择APK后点击next

1

  1. 选择相应密钥(Key Store)并点击next

若无密钥则新建密钥

2

  1. 生成APK文件

按照下图所示进行配置

3

  1. 生成APK文件后即可安装到安卓端运行

要对使用的安卓手机进行相应的设置,关闭纯净模式,允许外部来源或未知来源下载并安装程序

修改APP图标

方法一

此方法较为简单

  1. 将准本好的图标放入res目录下的drawable/mipmap

假设图片名为app_icon.png,图片名中必须都为小写,否则编译错误

  1. 修改AndroidManifest.xml文件中的icon/roundIcon属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myfirstapp">

<application
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:roundIcon="@drawable/app_icon"
android:supportsRtl="true"
android:theme="@style/Theme.MyFirstApp">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

图片格式建议保存为.png

此外,这两个属性都能对图标进行设置,在设置时只使用一个也可以达到效果,但如果两个同时使用的话,属性指定的对象需要设置一致。若不一致,我测试结果是显示的roundIcon指定的对象

找到android:roundIcon 属性的解释:android:roundIcon 属性指定一个图标,但只有你需要给应用设置一个特别的圆形图标时才要用到这个属性。

方法二

使用Image Asset Studio,此方法较为复杂,但是应用性更强,容错率更高

隐藏应用标题

Method1

找到values目录下的themes.xml文件

1
2
3
4
5
6
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.MyFirstApp" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
...
</style>
</resources>

修改style

1
2
3
4
5
6
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.MyFirstApp" parent="Theme.MaterialComponents.DayNight.NoActionBar">
...
</style>
</resources>

复制/获取粘贴板的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 将字符串复制到粘贴板
public static void copy(Context context, String s) {
// 获取系统剪贴板
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
// 创建一个剪贴数据集,包含一个普通文本数据条目(需要复制的数据)
ClipData clipData = ClipData.newPlainText(null, s);
// 把数据集设置(复制)到剪贴板
clipboard.setPrimaryClip(clipData);
}
// 从粘贴板获取内容
public static String getCopy(Context context) {
// 获取系统剪贴板
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
// 返回数据
ClipData clipData = clipboard.getPrimaryClip();
if (clipData != null && clipData.getItemCount() > 0) {
// 从数据集中获取(粘贴)第一条文本数据
return clipData.getItemAt(0).getText().toString();
}
return null;
}

项目中导入Jar包

  1. 将下载好的Jar包放在app路径下的lib文件夹中
  2. 右键该Jar包并点击add as library
  3. 选择相应的模块后点击OK进行导入
  4. 导入成功

Sync同步编译

FileSync Project with Gradle Files

Gradle国内镜像

使用Android Studio进行安卓开发,由于项目内Gradle使用的是Google的远程仓库,在国内访问速度比较慢,因此可以增加国内镜像,比如阿里云的仓库

在项目的build.gradle文件中添加阿里镜像仓库的地址,如下所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
maven{ url'https://maven.aliyun.com/nexus/content/groups/public/' }
maven{ url'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.0.3"

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
maven{ url'https://maven.aliyun.com/nexus/content/groups/public/' }
maven{ url'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
google()
mavenCentral()
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

随着Android Studio的不断更新,build.gradle文件的配置内容有所改变,原来的allprojects模块转移到setting.gradle文件中

更新后的build.gradle文件如下所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
maven{ url'https://maven.aliyun.com/nexus/content/groups/public/' }
maven{ url'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.0.3"

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

更新后的setting.gradle文件如下所示

1
2
3
4
5
6
7
8
9
10
11
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
maven{ url'https://maven.aliyun.com/nexus/content/groups/public/' }
maven{ url'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
google()
mavenCentral()
}
}
rootProject.name = "ZCPP"
include ':app'

若项目中需要使用NDK来引入C++代码,可在local.properties文件中设置本地NDK路径,如下所示

1
2
3
4
5
6
7
8
9
10
11
## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file should *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=D\:\\AndroidStudio\\SDK
ndk.dir=D\:\\AndroidStudio\\SDK\\ndk-bundle

不过在编译时会提示这种方法可能很快就要被取代,可以改为在app下的build.gradle文件中设置ndk版本

[CXX5106] 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 [22.1.7171670] in all native modules in the project. https://developer.android.com/r/studio-ui/ndk-dir

1
2
3
4
5
android {
...
ndkVersion "22.1.7171670"
...
}

手动引入外部模块

2021/11/29,我是用的Android Studio版本为3.1,在引入模块时无法点击NextFinish

可以通过将外部库复制到项目中,修改settings.gradle文件来实现外部模块的引入

假设引入的模块名为library

settings.gradle文件中增加下面的内容然后重新编译即可

1
include ':library'

Related