14

Android Studio と gradle を使用してライブラリ Android プロジェクト用の AAR ファイルを作成しようとしています。

このアーカイブから特定のフォルダーとファイルを除外したいのですが、有効な解決策が見つかりません。

プロジェクトには 2 つのフレーバーがあります。

app/
|--libs/
|--src/
   |--flavour1/
   |  |--java/
   |     |--a1/
   |     |  |--class_File1.java
   |--flavour2/
   |  |--java/
   |     |--a1/
   |     |  |--class_File1.java
   |--main/
      |--java/
      |  |--...
      |--res/
      |  |--raw/
      |  |  |--comments.txt
      |  |--...
      |--AndroidManifest.xml

そして、このようなbuild.gradleファイルを使用します

apply plugin: 'com.android.library'

android {
compileSdkVersion 21
buildToolsVersion "21.1.2"

defaultConfig {
    minSdkVersion 10
    targetSdkVersion 21
}
packagingOptions {
    exclude 'assets'
    exclude '**/comments.txt'
}


sourceSets {

        flavour1 {
            resources {
                exclude '**/comments.txt'
            }
        }
        flavour2 {

        }

}

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

productFlavors {

    flavour1 {

       packagingOptions {
            exclude 'assets'
            exclude 'res/raw/comments.txt'
        }
    }
    flavour2 {
    }
}
}

dependencies {
compile 'com.google.android.gms:play-services:+'
}

一般的に言えば、私は多くの実験をしてきました。sourceSets でのpackageOptions、除外を試しましたが、何も機能していないようです。私が達成しようとしているのは、たとえば.AARアーカイブにファイルcomments.txtとオプションのフォルダーであるフォルダー「assets」を含めないことです。.AAR ファイルの名前を zip に変更し、含まれているファイルを調べることで、.AAR ファイルを毎回調べます。

ここでは、構成が解決策になる可能性がありますが、それを使用する方法や先に進む方法がわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

0

今は試すことができませんが、これはおそらく私のアプローチになるでしょう:

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        aidl.srcDirs = ['src']
        resources.srcDirs = ['src']           
        renderscript.srcDirs = ['src']
        java.srcDirs = ['src']
        res.srcDirs = ['res']
    }

    flavor1 {
        java.srcDirs = ['src/main/java', 'src/flavor1/java']         
        res.srcDirs = ['src/flavor1/res'] //this differs from your structure
        assets.srcDirs = []
    }

    flavor2 {
        java.srcDirs = ['src/main/java', 'src/flavor2/java']
        res.srcDirs = ['src/flavor2/res'] //this differs from your structure
        assets.srcDirs = ['src/main/res/raw']
    }
}

繰り返しますが、私はそれを試すことができなかったので、これは完全にナンセンスかもしれません. アイデアは、ものを除外するのではなく、フレーバーに必要なファイル/ディレクトリのみを含めることでした。これにより、フレーバーごとにファイル/フォルダーが重複する可能性があります。

ソースとしてお勧めします: Gralde Plugin User GuideXavier Ducrohet からの回答、およびこのGradle + Android は、 buildFlavor のカスタム フォルダーで /assets を上書きしたいと考えています

于 2015-04-23T19:15:25.837 に答える