Gradle DSL method not found multiDexEnabled()

Android

ことの発端は、Google Cloud Messaging (GCM)を実装するために、Google Play Serviceを読み込むようにしたのですが、
https://developers.google.com/cloud-messaging/android/client

実行時に下記のエラーが出て、実行できなくなってしまったのです。

 Error:The number of method references in a .dex file cannot exceed 64K.
 Learn how to resolve this issue at 
 https://developer.android.com/tools/building/multidex.html

はぁぁ。。。

で、下記のサイトの指示を読みます。

http://developer.android.com/intl/ja/tools/building/multidex.html

かいつまむと、プログラムが大きくなったり、大きなライブラリを読み込んだりしていると、dexが大きくなって、一つのdexではなくなってしまうので、複数のdexを作るようにするんだよ。ということだそうです。

で、AndroidManifest.xmlと、build.gradleを書いてある通りにやったところ、

 Gradle DSL method not found multiDexEnabled() 

というGradkeのエラーが出て、先に進みません。。。

ググったりしても、Gradleのバージョンが古いんじゃないか?とかそんな話ばかりでして、役に立ちませんでした。

さて、一日明けて、よくよく自分の作ったbuild.gradleを見てみると、

「あっ multiDexEnabled trueの書いてある場所が違ってた…」

というわけで、うまく動いたbuild.gradleを貼っておきます。

 //アプリケーションレベルにあるbuil.gradle
 apply plugin: 'com.android.application'
 
 repositories {
    maven { url 'https://jitpack.io' }
    mavenCentral()
 }
 
 android {
    compileSdkVersion 22
    buildToolsVersion '22.0.1'
 
    defaultConfig {
        applicationId "jp.onlineconsultant.proto"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        // Enabling multidex support.
        multiDexEnabled true
    }
 
   //エラー時は、ここに  multiDexEnabled trueが書かれていた
 
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
 }
 
 dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    //  compile 'com.android.support:appcompat-v7:23.1.1'
    //osm bonuspackでつけたし
    compile 'com.github.MKergall.osmbonuspack:OSMBonusPack:v5.6.1'
    //greenDAOをつけたし
    compile 'de.greenrobot:greendao:2.0.0'
    compile 'com.facebook.android:facebook-android-sdk:4.6.0'
 
    //gcm のためにつけたし
    compile 'com.google.android.gms:play-services:8.4.0'
    //compile 'com.google.android.gms:play-services-gcm:8.4.0'
 
    //Building Apps with Over 65K Methods 対応
    //http://developer.android.com/intl/ja/tools/building/multidex.html
    compile 'com.android.support:multidex:1.0.0'
 
 }
 
 apply plugin: 'com.google.gms.google-services'
 //プロジェクトのTOPレベルにあるbuild.gradle
 
 buildscript {
    repositories {
        jcenter()
    }
    dependencies {
 
    classpath 'com.android.tools.build:gradle:2.0.0-alpha9'
    classpath 'com.google.gms:google-services:2.0.0-alpha3'
 
 //        classpath 'com.google.gms:google-services:1.5.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
 }
 
 allprojects {
    repositories {
        jcenter()
    }
 }

Gradle Attribute theme has already been defined

Android

Gradle Attribute theme has already been defined

Gradleさんを勉強中です。
Google Play Serviceライブラリを読み込みたいので

 dependencies{
 	compile 'com.android.support:appcompat-v7:21.0.+'
 	compile 'com.google.android.gms:play-services:5.+'
 	}

としていたところ

 Gradle Attribute theme has already been defined 

となりビルドできませんでした。

下記に同じような話が載っていたので
http://stackoverflow.com/questions/19843784/google-play-services-library-update-and-missing-symbol-integer-google-play-serv

 dependencies{
 	compile 'com.android.support:appcompat-v7:21.0.+'
 	compile 'com.google.android.gms:play-services:6.1.+'
 	}

にしたところ、治りました!

Gradle Androidプロジェクトのビルド

Android

Gradle Androidプロジェクトのビルド

build.gradleのサンプルを載せておきます。

 buildscript{
 	repositories{
 		mavenCentral()
 	}
 	
 	dependencies{
 		classpath 'com.android.tools.build:gradle:0.12.+'
 		
 	}
 }
 
 apply plugin: 'com.android.application'
 
 android{
 	compileSdkVersion 21
 	buildToolsVersion "21.0.1"
 
     sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        	}
 	}
 
 	}
 
 dependencies{
 	compile 'com.android.support:appcompat-v7:21.0.+'
 	compile 'com.google.android.gms:play-services:6.1.+'
 	}

最初によくわからなかった点

  • buildToolsVersion とは??

SDK Managerを起動してみると、Tools→Android SDK Build-toolsというのがいくつかあります。この数字をちゃんと入れないとダメです。

  • local.properties をおく

プロジェクトのルートディレクトリに、SDKの場所を書いたlocal.propertiesというファイルをおくか、環境変数にSDKの場所を設定しないといけません。

Windowsでのlocal.propertiesの書き方が実は最初わからなかったので、サンプルを載せておきます。

//sdk.dir = C:\\\adt-bundle-windows-x86_64-20130522\\\adt-bundle-windows-x86_64-20130522\\\sdk

Got error 127 from storage engine

MySQL

Got error 127 from storage engine というエラーが出てSQLが実行できない

テーブル名がtest_tableだとして

 CHECK TABLE test_table;

としてみると

 Table 	Op 	Msg_type 	Msg_text
 DB.test_table 	check 	warning 	Table is marked as crashed
 DB.test_table 	check 	warning 	3 clients are using or haven't closed the table pr...
 DB.test_table 	check 	error 	Record at pos: 73412 is not remove-marked
 DB.test_table 	check 	error 	record delete-link-chain corrupted
 DB.test_table 	check 	error 	Corrupt

と帰ってきてしまいます。

 REPAIR TABLE test_table;

としたら治りました。