web-dev-qa-db-ja.com

Active Androidがgradle2.0で機能しないのはなぜですか?

アプリでActive Androidを使用しています。Android Studioを1.3から2.0にアップグレードするまでは正常に機能していました。このアップグレードにより、gradleもアップグレードされました。 2.0に移行すると、アクティブなAndroidで問題が発生します。

Gradle 2.0でビルドすると、このエラーが発生します。

Caused by: Java.lang.NullPointerException: Attempt to invoke virtual method 'Java.lang.String com.activeandroid.TableInfo.getTableName()' on a null object reference
                                                                       at com.activeandroid.Cache.getTableName(Cache.Java:156)
                                                                       at com.activeandroid.query.From.addFrom(From.Java:169)
                                                                       at com.activeandroid.query.From.toSql(From.Java:250)
                                                                       at com.activeandroid.query.From.execute(From.Java:298)

古いスタジオをgradle1.3で構築してみましたが、まだ正常に機能しています。何か助けてください?

アプリが上記のエラーを出しているときのbuild.gradleファイル

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:2.0.0'
        classpath 'com.google.gms:google-services:2.0.0-beta2'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

アプリが正常に動作している場合のbuild.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:1.3.0'
        classpath 'com.google.gms:google-services:2.0.0-beta2'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

gradleラッパーのプロパティ

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.Zip
16
Rohan Arora

私もこの問題に遭遇しました。これはAndroid 23以上のデバイスでのみ問題であり、インスタント実行をオフにすると回避できます([ファイル]-> [設定]-> [ビルド、実行]、展開->インスタント実行)。

インスタント実行を維持したい場合は、「コード変更時にアクティビティを再開する」のチェックを外してみてください。

Macの場合:

環境設定>ビルド、実行、展開>インスタント実行> [コード変更時にアクティビティを再開する]のチェックを外します

29
Aaron Y

インスタント実行がアクティブ化されているときにDexFileで検索しているモデルクラスを取得できないActiveAndroidに問題がありますDexFileとインスタント実行に関するいくつかの情報 ここ

考えられる回避策は3つあります。

  1. インスタントランを無効にするAndroid Studio-> Preferences-> Intant run
  2. すでに提案されているコードをAndroidManifestに追加します。
<meta-data
    Android:name="AA_MODELS"
    Android:value="com.myapp.model.Item, com.myapp.model.Category" />
  1. ActiveAndroidの初期化に次のコードを追加します。
Configuration.Builder config = new Configuration.Builder(this);
config.addModelClasses(Model1.class, Model2.class);
ActiveAndroid.initialize(config.create());

それが役に立てば幸い

9
VictorG

同じ問題が発生しましたが、理由はわかりません。AndroidManifestでModelクラスを明示的に指定しました。

<meta-data
    Android:name="AA_MODELS"
    Android:value="com.myapp.model.Item, com.myapp.model.Category" />

解決されました。

7
Linkang Ma

私はgradle2.0で同じ問題を抱えていますが、なぜこのエラーが発生するのかわかりません、最終的に私は解決済み gradleバージョンをgradle 1.5.にダウングレードします

1

アクティブなAndroid ORMで同じ問題が発生しました。エミュレーターでのみ機能しません。インスタント実行をオフにします。アプリを完全に再インストールすると、エラーが解消されました。

0
Kishore Vignesh

VictorGが提供する回答に追加するには、インスタント実行を無効にすることを回避できます。基本的な問題は、インスタント実行によるCacheの変更により、ModelInfoDexFileの値を保持しないことであるため、ModelInfoに何かが含まれているかどうかを確認できます。テーブルデータを作成し、必要に応じてActiveAndroidを再初期化します。

if (Cache.isInitialized() && Cache.getTableInfos().isEmpty()) {
    ActiveAndroid.dispose();
}
ActiveAndroid.initialize(HOWEVER_YOU_BUILD_YOUR_CONFIG);
0
lodlock