20

私は自分の Android Studio IDE に夢中になっています。

Central (v2.7.1) から Maven ライブラリ simple-xml を追加したいと考えています。

  1. プロジェクトはうまくコンパイルされます

  2. Gradle には lib 依存関係がありますbuild.gradle

    dependencies {
      compile 'com.android.support:appcompat-v7:18.0.0'
      compile 'org.simpleframework:simple-xml:2.7.1'
    }
    
  3. エクスポートは、simple-xml ライブラリの Android Studio のモジュール設定でチェックされます。

ここのスクリーンショット: https://s6.postimg.cc/xxgj56zkx/Module_Settings.png

そして、アプリを実行するとクラスが見つかりませんでした...

java.lang.NoClassDefFoundError: org.simpleframework.xml.core.Persister

私は迷っています.Gradleは何らかの理由でライブラリと依存関係をapkにパックしていないようです...

Edit1 : 私の Android Studio バージョンは 0.2.13 (最新)、Gradle 0.5.+ です。

Edit2 :私が使用する完全なbuild.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 18
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:18.0.0'
    compile 'org.simpleframework:simple-xml:2.7.1'
}
4

3 に答える 3

56

simple-xml次の方法でライブラリを追加する必要があります。

compile('org.simpleframework:simple-xml:2.7.1') {
    exclude group: 'stax', module: 'stax-api'
    exclude group: 'xpp3', module: 'xpp3'
}

ライブラリstax-apixpp3Android クラスと競合しています。これらの jar のクラスは Android に含まれているようです。

dexのメッセージは次のとおりです。

「javax/xml/stream/events/StartElement.class」の処理で問題が発生しました:

コア ライブラリを構築しない場合のコア クラス (java.* または javax.*) の不適切な使用または誤った使用。

これは多くの場合、IDE (Eclipse など) を使用しているときに、コア ライブラリ ファイルをアプリケーションのプロジェクトに誤って含めたことが原因です。コア クラスを意図的に定義していないことが確実な場合は、これが何が起こっているかの最も可能性の高い説明です。

ただし、実際にはコア名前空間でクラスを定義しようとしている可能性があります。そのソースは、たとえば Android 以外の仮想マシン プロジェクトから取得した可能性があります。これは確実に機能しません。少なくとも、アプリとプラットフォームの将来のバージョンとの互換性が損なわれます。また、合法性が疑わしいこともよくあります。

アプリケーションをコンパイルするのではなく、完全な仮想マシン ディストリビューションを作成する一部としてのみ適切なコア ライブラリをビルドする場合は、「--core-library」オプションを使用してこのエラー メッセージを抑制します。

「--core-library」を使用しても実際にはアプリケーションをビルドしている場合は、アプリケーションがまだビルドまたは実行に失敗する可能性があることに注意してください。たとえば、オペレーティング システムをアップグレードすると、アプリケーションが機能しなくなったことに気付いた顧客が怒っていることに備えてください。この問題の責任はあなたにあります。

たまたまコア パッケージにあるコードを合法的に使用している場合、最も簡単で安全な代替手段は、そのコードを再パッケージ化することです。つまり、問題のクラスを独自のパッケージ名前空間に移動します。これは、コア システム クラスと競合しないことを意味します。JarJar は、この取り組みに役立つツールです。これができないとわかった場合、それはあなたがたどっている道が最終的に痛み、苦しみ、悲しみ、嘆きにつながることを示しています.

于 2013-10-18T17:41:28.620 に答える
5

Androidでmavenを使用しても同じエラーが発生しました。依存関係を修正し、すべてがうまくいきました。これは、simple-xml ライブラリに対する私の依存関係です。

<dependency>
<groupId>org.simpleframework</groupId>
<artifactId>simple-xml</artifactId>
<version>2.7.1</version>
<scope>compile</scope>
<exclusions>
    <exclusion>
        <artifactId>xpp3</artifactId>
        <groupId>xpp3</groupId>
    </exclusion>
    <exclusion>
        <artifactId>stax-api</artifactId>
        <groupId>stax</groupId>
    </exclusion>
    <exclusion>
        <artifactId>stax</artifactId>
        <groupId>stax</groupId>
    </exclusion>
    <exclusion>
        <artifactId>spring-web</artifactId>
        <groupId>org.springframework</groupId>
    </exclusion>
    <exclusion>
        <artifactId>commons-logging</artifactId>
        <groupId>commons-logging</groupId>
    </exclusion>
</exclusions>
</dependency>
于 2014-05-18T20:57:20.987 に答える
1

問題が見つかりました。

予想通りgraddle plugin 0.5.+でした。

Gradle プラグイン 0.6.+ (Gradle 1.8) を使用した Android Studio 0.3.0 では、この問題が修正されています。

ただし、この方法で Android Studio 0.2.13 および gradle プラグイン 0.5 で動作するようにアプリケーションを作成しました。

Gradle プラグインが Maven Central からライブラリをデプロイすることを拒否するため、ライブラリと依存関係をプロジェクトの lib ディレクトリにダウンロードしました。プロジェクトの lib ディレクトリにあるローカル ライブラリとしてライブラリを使用するようにプロジェクトをセットアップします。

回避策の指示:

  1. モジュール設定で、プロジェクト内の simple-xml (maven central) へのすべての参照を削除します

  2. simple-xml-2.7.1.jar、stax-1.2.0.jar、stax-api-1.0.1.jar、および xpp3-1.1.3.3.jar をプロジェクトの lib ディレクトリにコピーします。

  3. 私のプロジェクトで lib simple-xml-2.7.1.jar を選択し、Add as Library コンテキスト メニューを使用して lib をインポートします。

  4. build.gradle を次のように変更します。

    依存関係{

    compile 'com.android.support:appcompat-v7:18.0.0'
    
    compile files('simple-xml-2.7.1.jar')
    

    }

注: 依存関係を含めないでください。そうしないと、Grzegorz が言及したように、Android システムとの競合が発生します。

于 2013-10-20T02:56:14.650 に答える