最近開始轉用 Android Studio 寫 Android app。昨日升級到 0.5.2 時發現 gradle.xml 和另外兩個 .iml 檔案的路徑都被改為絕對路徑,而非先前的 $PROJECT_DIR$$MODULE_DIR$。Google 過似乎還未有解決方法,現在惟有不 commit 這幾個檔案。

另一個問題是在 Android 2.3 的設備運行用了 ActionBarCompat 的 app 會「彈 app」。只要你的 activity 有 action overflow 的話,當按動設備的 Menu 掣時,activity 就會自行結束。但在 logcat 就不覺有 exception 的 stack trace。Google 過之後就發現原來新版 Android Studio 所附帶的 Gradle 用了新的 PNG cruncher 會令到 Android 2.3 死機。目前的解決方法是使用舊版 PNG cruncher。

第一個方法是修改 project 目錄的 build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.0'
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

另一個是修改 project module 目錄的 build.gradle

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    // Use old PNG cruncher because of crashes on GB
    android.aaptOptions.useAaptPngCruncher = true

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    signingConfigs {
        debug {
            storeFile file('debug.keystore')
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:19.0.1'
    compile 'com.android.support:gridlayout-v7:19.0.0'
    compile 'com.android.support:appcompat-v7:19.0.1'
    compile 'com.google.android.gms:play-services:4.2.42'
}

改完之後按一下 Sync Project with Gradle Files,之後 build 出來的 app 就正常了。

參考