AndroidStudio 의 Gradle 을 사용 하여 jar 가방 과 aar 가방 을 헷 갈 리 게 합 니 다.

5097 단어 androidJava
혼동 생 성 jar:
import com.android.build.gradle.LibraryPlugin
import com.android.build.gradle.AppPlugin

def getPackageName(){
    //  AndroidManifes.xml     
    println("siy-minifest:"+android.sourceSets.main.manifest.srcFile)
    def androidManifest = new XmlSlurper().parse(android.sourceSets.main.manifest.srcFile)
    def packageName = androidManifest['@package'];
    println("siy-packageName:"+packageName);
    return packageName;
}


def packageNameToPackagePath(){
    String packagePath =  "${getPackageName()}".replace('.','\\');
    println("siy-packagePath:"+packagePath);
    return packagePath;
}


task makeJar(dependsOn: ['compileReleaseJavaWithJavac'], type: Jar) {
    group "payeco"
    description  "Automatically generate the jar packages for the SDK"
    //            
    def srcClassDir = [project.buildDir.absolutePath + "\\intermediates\\classes\\release"];
    //        
    from srcClassDir
    //  class     
    println("siy-srcClassDir:"+srcClassDir)
    //           
    exclude packageNameToPackagePath()+"\\BuildConfig.class"
    //           ,     aa.bb.cc  aa\bb\cc
    exclude packageNameToPackagePath()+"\\BuildConfig\$*.class"
    exclude "**\\R.class"
    exclude "**\\R\$*.class"
    //              
    include packageNameToPackagePath()+"\\**\\*.class"


    //      Jar      
    extension = "jar"
    //    Jar    ......     ,    [baseName]-[appendix]-[version]-[classifier].[extension]
    archiveName = project.name+"-org-"+android.defaultConfig.versionName+"."+extension
}

task proguardJar(dependsOn: ['makeJar'], type: proguard.gradle.ProGuardTask) {
    group "payeco"
    description  "Automatically generate the proguard jar packages for the SDK"
    //Android     proguard   
    configuration android.getDefaultProguardFile('proguard-android.txt')
    //       ,     proguard.cfg,      proguard-project.txt
    configuration 'proguard-rules.pro'
    String inJar = makeJar.archivePath.getAbsolutePath()
    //     jar    
    println("siy-inJar:"+inJar)
    //   jar
    injars inJar
    //   jar
    String outJar = inJar.substring(0, inJar.lastIndexOf(File.separator)) + "\\${makeJar.archiveName}".replace("-org-","-")
    //    jar    
    println("siy-outJar:"+outJar)
    outjars outJar
    //           ( ,   )
    dontshrink


    Plugin plugin = getPlugins().hasPlugin(AppPlugin) ?
            getPlugins().findPlugin(AppPlugin) :
            getPlugins().findPlugin(LibraryPlugin)
    if (plugin != null) {
        List runtimeJarList
        if (plugin.getMetaClass().getMetaMethod("getRuntimeJarList")) {
            runtimeJarList = plugin.getRuntimeJarList()
        } else if (android.getMetaClass().getMetaMethod("getBootClasspath")) {
            runtimeJarList = android.getBootClasspath()
        } else {
            runtimeJarList = plugin.getBootClasspath()
        }
        for (String runtimeJar : runtimeJarList) {
            println("siy-runtimejar:"+runtimeJar)
            //  proguard    runtime
            libraryjars(runtimeJar)
        }
    }
}

여기 서 가방 이름 을 되 돌려 주 는 것 과 가방 이름 을'/'로 바 꾸 는 두 가지 방법 을 설명 하 겠 습 니 다.AS 가 자바 코드 를 컴 파일 한 후의'class'를 build/intermediates/classes/release 아래 에 저장 하 는 것 을 알 고 있 습 니 다.구체 적 인 경 로 는 build/intermediates/classes/release/packageName 아래 에 있어 야 하기 때문에 manifest 아래 에 가서 packName 을 읽 어야 합 니 다.build.gradle 의 applicationId 를 왜 읽 지 않 습 니까?또 하 나 는 manifest 에서 읽 은 packageName 이 com.a.b.c 라 는 것 입 니 다.그래서 저 는 그것 을 com/a/b/c 로 만 드 는 방법 을 썼 습 니 다.jar 를 헷 갈 리 게 하지 않 으 려 면 proguarJar 라 는 task 를 실행 할 필요 가 없습니다.최종 적 으로 생 성 된 jar 가방 은 build/libs 디 렉 터 리 에 있 습 니 다.
헷 갈 리 는 aar 생 성:
     buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


    //     aar    
    libraryVariants.all{
        variant->
            variant.outputs.each{
                outFile->
                    if(outFile.outputFile !=null && outFile.outputFile.name.endsWith('.aar'))
                        if('release'.equals(variant.buildType.name)) {
                            outFile.outputFile = new File(outFile.outputFile.getParent(), "${project.name}-${android.defaultConfig.versionName}.aar")
                        }else if('debug'.equals(variant.buildType.name)){
                            outFile.outputFile = new File(outFile.outputFile.getParent(), "${project.name}-org-${android.defaultConfig.versionName}.aar")
                        }
            }
    }

헷 갈 리 지 않 으 려 면 minifyEnable 을 false 로 설정 하면 됩 니 다.우정 알림:module Library 를 디 버 깅 하려 면 buildTypes 설명 을 하 는 것 이 좋 습 니 다.
최종 생 성 된 aar 패 키 지 는 build/outputs/aar 디 렉 터 리 에 있 습 니 다.

좋은 웹페이지 즐겨찾기