Android Studio 配置与踩坑记录

Android Studio 用久了,各种问题都遇到过。这里整理一些实际踩过的坑和解决方法。

多项目管理

Android Studio默认会在同一窗口打开新项目,同时开多个项目时很不方便。

设置多窗口模式:

  1. FileSettings(Windows/Linux)或 Android StudioPreferences(Mac)
  2. Appearance & BehaviorSystem Settings
  3. 勾选 Open project in new window
  4. 点击 Apply
1
2
3
4
5
File/Settings
├── Appearance & Behavior
│ └── System Settings
│ └── Project Open
│ └── Open project in new window [勾选]

JDK配置

报错:

1
2
3
Cannot find System Java Compiler. Ensure that you have installed a
JDK (not just a JRE) and configured your JAVA_HOME system variable
to point to the according directory.

解决:

  1. FileProject Structure
  2. 左侧选 SDK Location
  3. JDK Location 选本地JDK目录

常见JDK路径:

1
2
3
C:\Program Files\Java\jdk1.8.0_xxx                    (Windows)
/Library/Java/JavaVirtualMachines/jdk1.8.0_xxx.jdk/Contents/Home (Mac)
/usr/lib/jvm/java-8-openjdk-amd64 (Linux)

Gradle配置

内存不足

报错:

1
Android Studio error: Unable to start the daemon process

解决:

修改 gradle.properties

1
2
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true

仓库配置

报错:

1
2
Could not find com.android.tools.build:aapt2:3.3.2-5309881.
Plugin with id 'com.android.application' not found

解决:

项目级 build.gradle 里加 google()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
buildscript {
repositories {
google() // 必须
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
}
}

allprojects {
repositories {
google() // 必须
jcenter()
}
}

CMake版本

报错:

1
2
CMake '3.6.0' was not found in PATH or by cmake.dir property.
CMake '3.10.2' found in SDK did not match requested version '3.6.0'.

解决:

模块级 build.gradle 指定版本:

1
2
3
4
5
6
7
android {
externalNativeBuild {
cmake {
version "3.10.2"
}
}
}

常见问题

AppCompat主题错误

报错:

1
error: resource style/Theme.AppCompat.Light.DarkActionBar

解决:

添加AppCompat依赖:

1
2
3
dependencies {
implementation 'com.android.support:appcompat-v7:28.+'
}

注意版本不能超过 compileSdkVersion

SDK版本 AppCompat版本
28 28.x.x
29 迁移到AndroidX

9-patch图片错误

报错:

1
Error: top-left corner pixel must be either opaque white or transparent

原因: .9.png左上角1x1像素必须是纯色(白色或透明),这是Android识别9-patch的标记。

解决: 用Android Studio的9-patch编辑器重新编辑,确保左上角像素是纯色。

资源压缩错误

报错:

1
Error: Resource shrinker cannot be used for libraries.

解决: 如果是library模块,删除 build.gradle 里的 shrinkResources 配置。

NDK工具链问题

报错:

1
No toolchains found in the NDK toolchains folder for ABI with prefix

原因: NDK缺少mips64el工具链。

解决: 下载完整版NDK,把缺少的文件夹复制到 ndk-bundle/toolchains 目录。

JDK版本不兼容

报错:

1
Unsupported major.minor version 51.0

版本对照:

版本号 JDK版本
49.0 Java 1.5
50.0 Java 1.6
51.0 Java 1.7
52.0 Java 1.8

解决: 把项目JDK改成JDK 7或更高。

导入本地依赖工程

  1. 把依赖工程拷到工程根目录
  2. 项目级 settings.gradle 添加:
    1
    include ':项目名字'
  3. app模块 build.gradle 添加:
    1
    2
    3
    dependencies {
    compile project(':项目名字')
    }

如果第三方工程没有 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
apply plugin: 'com.android.library'

android {
compileSdkVersion 24
buildToolsVersion "24.0.0"

defaultConfig {
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}

网络请求错误处理

问题: getInputStream()FileNotFoundException

正确处理:

1
2
3
4
5
6
7
InputStream is = null;
int code = conn.getResponseCode();
if (code == 200) {
is = conn.getInputStream();
} else {
is = conn.getErrorStream();
}

应用生命周期

完全退出

1
2
3
4
5
6
7
8
9
public static void exitApp(Context context){
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.AppTask> appTaskList = activityManager.getAppTasks();
for (ActivityManager.AppTask appTask : appTaskList) {
appTask.finishAndRemoveTask();
}
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
}

重启应用

1
2
3
4
5
6
7
8
9
10
public static void restartApp(){
Intent intent = new Intent(BaseApplication.getAppContext(), MainActivity.class);
PendingIntent restartIntent = PendingIntent.getActivity(
BaseApplication.getAppContext(),
-1,
intent,
PendingIntent.FLAG_ONE_SHOT);
AlarmManager mgr = (AlarmManager) BaseApplication.getAppContext().getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 10 * 1000, restartIntent);
}

调试技巧

连接夜神模拟器

  1. 启动Android Studio
  2. 启动夜神模拟器
  3. CMD执行:
    1
    "D:\Program Files\Nox\bin\nox_adb.exe" connect 127.0.0.1:62001
  4. Android Studio点击Run(或Shift+F10)

按Shift+F10可查看设备连接情况。

断点问题

问题: “当前不会命中断点。源代码与原始版本不同”

解决:

  1. 复制文件内容
  2. 删除文件
  3. 编译(会报错)
  4. 新建同名文件
  5. 粘贴内容
  6. 重新编译

SQLite使用

Android Studio里通过 SQLiteDatabase 操作数据库,主要步骤:

  1. 创建类继承 SQLiteOpenHelper
  2. 实现 onCreate()onUpgrade()
  3. getWritableDatabase() 获取实例
  4. 执行增删改查

以上就是Android Studio开发中常见的一些问题和解决方法,主要是实际踩坑的记录。