Android 开发常见问题总结

解决无限 This file is indented with tabs instead of 4 spaces

File -> Settings -> Editor -> Code Style -> Java -> Tabs and Indents -> 勾选Use tab character选项

配置阿里Maven仓库加速Gradle构建

1
2
3
4
5
allprojects {
repositories {
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
}

升级Andorid Studio 2.3.0无法使用Instant run

1
This version of Android Studio is incompatible with the Gradle Plugin used. Try disabling Instant Run (or updating either the IDE or the Gradle plugin to the latest version)

关闭Instant Run即可

卡在Building XXX Gradle project info

方式一

项目中gradle-wrapper-gradle-wrapper.properties文件distributionUrl字段是编译项目所用的Gradle,如果本地没有这个Gradle版本,需要从网络上下载,下载速度极其感人。

把distributionUrl字段的值改为本地已有的Gradle版本即可,例如:

1
distributionUrl=file\:/Users/Kevin/Workspaces/Gradle/gradle-3.4.1-all.zip

由于每次都要修改distributionUrl字段,不符合一个追求完美的程序员的作风。

方式二

  1. 新建一个项目在里面查找:
    gradle-wrapper.properties这个文件,看到:distributionUrl=https\://services.gradle.org/distributions/gradle-xxx-all.zip;
    这里说明推荐gradle版本需要用xxx版本
  2. 自己上网下载到这个包:gradle-xxx-all.zip
    进入目录/Users/xxx/.gradle/wrapper/dists/gradle-2.14.1-all/8bnwg5hd3w55iofp58khbp6yv,(8bnwg5hd3w55iofp58khbp6yv这个文件夹各个机器不一样),将里面的东西全部删掉
  3. 将下载的gradle-2.14.1-all.zip放到这里
  4. 重新启动android studio,gradle将会顺利通过。

gradle替换AndroidManifest中的占位符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="${appName}" //占位符
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>

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

1
2
3
4
5
6
7
buildTypes {
debug {
manifestPlaceholders = [appName: appNames.watch] //赋值占位符
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

java.util.concurrent.ExecutionException

1
2
3
4
5
6
Error:Execution failed for task ':app.main:transformClassesWithDexForDebug'.
com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.android.dx.command.Main with arguments
{--dex --num-threads=4 --multi-dex --main-dex-list
/Users/Kevin/AndroidStudioProjects/Shine/NurseStationPhone/app.main/build/intermediates/multi-dex/debug/maindexlist.txt --output
/Users/Kevin/AndroidStudioProjects/Shine/NurseStationPhone/app.main/build/intermediates/transforms/dex/debug/folders/1000/1f/main
/Users/Kevin/AndroidStudioProjects/Shine/NurseStationPhone/app.main/build/intermediates/transforms/jarMerging/debug/jars/1/1f/combined.jar}

gradle.properties 中增加如下配置:

1
org.gradle.jvmargs=-Xmx10248m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

java.lang.NoClassDefFoundError: rx.plugins.RxJavaPlugins

来自 stackOverflow 的翻译:

该问题可能是没有初始化 Multidex 选项导致的:

Android 5.0 之后的版本支持 Multidex
5.0 之后的 Android 版本用了一个叫做 ART 的运行时,它支持从 APK 文件中加载多 dex ,ART 在应用初始化的时候执行预编译,扫描 classes(..N).dex 文件并且编译它们为一个 .oat 文件,用于 Android 设备执行,关于 Android 5.0 运行时更多的资料,请看ART 的介绍,App 能够在 API21 上正常工作就是这个原因

Android 5.0 之前的设备支持 Multidex
Android 5.0 之前的平台用的是 Dalvik 运行时执行 App 代码的。默认情况下,Dalvik 限制每个 APK 只能是一个 classes.dex 字节码文件。为了绕过这个限制,可以使用 Multidex 的支持库,该支持库将会变成你应用程序主 DEX 文件的一部分,用来管理对附加 DEX 文件以及其包含代码的访问

如果出现了 java.lang.NoClassDefFoundError: rx.plugins.RxJavaPlugins 异常,首先确定一下设备的 Android 版本信息,如果低于 5.0,就可以采用一下方案解决:

首先导入 Multidex 支持库:

1
2
3
dependencies {
compile 'com.android.support:multidex:1.0.1'
}

自定义一个 application ,然后让它继承 MultiDexApplication,如下所示:

1
2
3
public class CustomApp extends MultiDexApplication {
...
}

Build APK 报错

Error:java.lang.OutOfMemoryError: GC overhead limit exceeded

gradle.properties 文件中添加如下配置:

1
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

mips64el-linux-android-strip

A problem occurred starting process ‘command ‘/Users/Kevin/Library/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/darwin-x86_64/bin/mips64el-linux-android-strip’’

官方 NDK 版本历史中的最新版已经移除了 MIPSMIPS64,如果项目中有用到需要下载较低版本替换即可,Revision 16b中虽然已经废弃了,但是还存在,Revision 17c 中已经没有这个库了

设计模式-职责链模式 设计模式-代理模式

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×