Android Studio Gradle 여러 Jar 내보내기

3874 단어
그런 게 있었는데...나의 요구를 내 앞에 두고 나는 제대로 나무라지 않았다.같은 코드는 A.jar, B.jar, C.jar 등 세 가지 버전으로 나뉘어 각각 다른 Jar를 내보내야 합니다.
  • A.jar 일반 항목
  • B.jar에는 b.jar
  • 이 포함됩니다.
  • C.jar은 c.jar(다른 프로젝트에서 온 것)을 포함한다. 원래는 매번 조금씩 고치고 번역하면 된다고 생각했는데 어차피 프로젝트의 변동이 크지 않아서 결과적으로 내가 틀렸다. 다른 프로젝트에서 온jar의 빈번한 변동으로 인해 나는 자주 Jar를 내보내야 한다. 매번 수동으로 고쳐야 하기 때문에 번거롭고 틀리기 쉽다. 결국 내가 여러 번 파괴된 후에저는gradle을 이용하여 여러 Jar를 한 번에 생성하기로 결정했습니다. Google Baidu는 비슷한 글이 없습니다. 시간 관계상 저는 비교적 폭력적인 방식만 사용할 수 있습니다. 다중 채널 APK를 참고하여gradle에서 다음과 같이 수정했습니다. 핵심 코드는 다음과 같습니다.
  •  buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
            debug {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
    
            pure.initWith(buildTypes.release)
            pure {
                //   src        ,             
            }
    
            im.initWith(buildTypes.release)
            im {
                //   src        ,             
            }
        }
    
    dependencies {
        //    compile fileTree(include: ['*.jar'], dir: 'libs')
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        provided files('libs/android-support-v4.jar')
    
        //              Jar
    
        //Debug version
        debugCompile files('libs/xxx.jar')
        debugCompile files('libs/xxx.jar')
    
        //Integration version
        releaseCompile files('libs/xxx.jar')
        releaseCompile files('libs/xxx.jar')
    
        //Pure version
        pureProvided files('libs/xxx.jar')
        pureCompile files('libs/xxx.jar')
    
        //IM version
        imProvided files('libs/xxx.jar')
        imProvided files('libs/xxx.jar')
    
    }
    
    task makeJar(type: Copy, dependsOn: ['build']) {
        //     
        delete 'build/libs/test.jar'
        //       
        from('build/intermediates/bundles/release/')
        //  jar       
        into('build/libs')
        // classes.jar  build/libs/   
        //include ,exclude       
        exclude "**/R.class"
        exclude "**/R\$*.class"
        include('classes.jar')
        //   
        rename('classes.jar', 'test.jar')
    }
    
    task makeJarPure(type: Copy, dependsOn: ['build']) {
        delete 'build/libs/pure.jar'
        from('build/intermediates/bundles/pure/')
        into('build/libs')
        exclude "**/R.class"
        exclude "**/R\$*.class"
        include('classes.jar')
        rename('classes.jar', 'pure.jar')
    }
    
    task makeJarIM(type: Copy, dependsOn: ['build']) {
        delete 'build/libs/im.jar'
        from('build/intermediates/bundles/im/')
        into('build/libs')
        exclude "**/R.class"
        exclude "**/R\$*.class"
        include('classes.jar')
        rename('classes.jar', 'im.jar')
    }
    

    이task는 상기 세 개의task를 동시에 실행하기 위해서일 뿐입니다. (jar의 버전이 많으면 위의task를 하나의 함수로 정의하고 아래의 방법으로 호출할 수 있습니다.) 하나를 실행하지 않고releaseJar만 실행하면 여러 버전의Jar를 생성할 수 있습니다.
    task releaseJar(type: Copy, dependsOn: makeJar) {
        dependsOn makeJarPure
        dependsOn makeJarIM
    
        from('build/libs')
        into('../app/libs')
        include('test.jar')
        include('pure.jar')
        include('im.jar')
    
        //integration version
        rename('test.jar', 'xxx' + '_release.jar')
    
        //pure version
        rename('pure.jar', 'xxx'  + '_release.jar')
    
        //IM version
        rename('im.jar', 'xxx' + '_release.jar')
    }
    

    좋은 웹페이지 즐겨찾기