Android Studio - Sizuha/devdog GitHub Wiki

์„ค์ •

  1. in AndroidStudio's settings > compile enable checkbox named Compile independent modules in parallel.
  2. Under Help> Edit Custom Vmoptions
-Xms1024m
-Xmx4096m
-XX:MaxPermSize=1024m
-XX:ReservedCodeCacheSize=256m
-XX:+UseCompressedOops

Build ๋ฌธ์ œ ํ•ด๊ฒฐ

MissingTranslation

strings.xml ๋“ฑ์—์„œ ๋‹ค๋ฅธ ์–ธ์–ด์— ๋Œ€ํ•œ ๋ฒˆ์—ญ๋ณธ์ด ์—†๋Š” ๊ฒฝ์šฐ.

์˜๋„๋œ ๊ฑฐ๋ผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—๋Ÿฌ๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

<resources>
    <string name="foo" translatable="false">bar</string>
</resources>

strings.xml ํŒŒ์ผ ์ „์ฒด์— ๋Œ€ํ•ด ๋ฌด์‹œ๋ฅผ ํ•˜๋ ค๋ฉด,

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
    <string name="api_url">http://foo.bar/api/</string>
</resources>

Import AAR

๋ฐฉ๋ฒ•1: App ํ”„๋กœ์ ํŠธ์— AAR ์ถ”๊ฐ€ํ•˜๊ธฐ

File > New Module... > Import .JAR/.AAR Pacakge

AAR ํŒŒ์ผ์„ ์„ ํƒํ•œ๋‹ค.

File > Project Structure... > Dependencies ์—์„œ ์ถ”๊ฐ€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•ด ์ฃผ๊ฑฐ๋‚˜, App์˜ build.gradle์— ๋‹ค์Œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€.

dependencies {
//...
    compile project(':๋ชจ๋“ˆ์ด๋ฆ„')
//...
}

๋ฐฉ๋ฒ•2: Gradle ์„ค์ •

Project์˜ build.gradle

allprojects {
    repositories {
        jcenter()
        mavenCentral()

        flatDir {
            dirs 'libs' // aar ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ๋กœ
        }
    }
}

App์˜ build.gradle

// compile 'ํŒจํ‚ค์ง€:๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ_์ด๋ฆ„:๋ฒ„์ „@aar'
compile 'com.library.slib:slib:0.2.3@aar'

Export AAR

Module์˜ build.gradle

android {
    defaultConfig {
        versionCode 1
        versionName "0.2.7" // Version

        project.archivesBaseName = "๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„"
        project.version = android.defaultConfig.versionName
    }

    libraryVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.aar')) {
                def fileName = "${archivesBaseName}-${version}.aar" // ๋นŒ๋“œ ํ›„ ๋งŒ๋“ค์–ด์งˆ AAR ํŒŒ์ผ์— ๋Œ€ํ•œ ๋„ค์ด๋ฐ.
                output.outputFile = new File(outputFile.parent, fileName)
            }
        }
    }
}

Gradle Script

๋ณต์ˆ˜์˜ Application ID ์„ค์ •

์ฐธ๊ณ 

app.gradle์—์„œ productFlavors ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ œํ’ˆ๋ณ„๋กœ Application ID ์„ค์ • ๋“ฑ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

android {
    ...
    defaultConfig {...}
    buildTypes {...}
    productFlavors {
        demo {
            applicationIdSuffix ".demo"
            versionNameSuffix "-demo"
        }
        full {
            applicationIdSuffix ".full"
            versionNameSuffix "-full"
        }
    }
}

ํŠน์ • ์ œํ’ˆ์„ ์‹คํ–‰/๋นŒ๋“œ ํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ, ๋ฉ”๋‰ด์—์„œ Build > Select Build Variant ํ•ญ๋ชฉ์„ ์„ ํƒ.

Android Studio 3.0์—์„œ flavorDimensions ์„ ์–ธ์ด ํ•„์ˆ˜๊ฐ€ ๋˜์—ˆ๋‹ค.

flavorDimensions "main"

productFlavors {
    general {
        dimension "main"
        applicationIdSuffix ".general"
    }
    extend {
        dimension "main"
        applicationIdSuffix ".extend"
    }
}

JAR export

์ฐธ๊ณ 

App/build.gradle ํŽธ์ง‘

//apply plugin: 'com.android.application'
apply plugin: 'com.android.library' // ๋ฐ˜๋“œ์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ”„๋กœ์ ํŠธ๋กœ ๋นŒ๋“œํ•ด์•ผ ํ•จ.

android {
    compileSdkVersion 22
    buildToolsVersion "21.1.2"

    sourceSets {
        main {
            //Path to your source code
            java {
                srcDir 'src/main/java'
            }
        }
    }

    defaultConfig {
        //applicationId "jp.co.gngs.projectd" // ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Application ID ๋“ฑ์€ ์ง€์ • ๋ถˆ๊ฐ€.
        minSdkVersion 11
        targetSdkVersion 22
        //versionCode 1
        //versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    lintOptions {
        abortOnError false
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile files('libs/classes.jar')
}

//task to delete the old jar
task deleteOldJar(type: Delete) {
    delete 'release/AndroidPlugin.jar'
}

//task to export contents as jar
task exportJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('release/')
    include('classes.jar')
    ///Rename the jar
    rename('classes.jar', 'AndroidPlugin.jar')
}

exportJar.dependsOn(deleteOldJar, build)

์‹คํ–‰

Gradle tasks ๋ฆฌ์ŠคํŠธ์—์„œ Taks/others/exportJar ํƒœ์Šคํฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, App/release/xxxx.jar ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.

๋นŒ๋“œ ํ›„์˜ APK/ARR ์ด๋ฆ„ ๋ณ€๊ฒฝ

์˜ˆ๋ฅผ๋“ค์–ด, ํŒŒ์ผ๋ช… ๋’ค์— ๋ฒ„์ „ ์ •๋ณด๋ฅผ ๋„ฃ๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ.

app ๋ชจ๋“ˆ์˜ build.gradle ์ˆ˜์ •.

APK

android {
    defaultConfig {
        project.archivesBaseName = "xxxxx"
        project.version = android.defaultConfig.versionName + "." + android.defaultConfig.versionCode
    }
    applicationVariants.all { variant ->
        if (variant.buildType.name == "release") {
            variant.outputs.all { output ->
                outputFileName = "${archivesBaseName}-${version}.apk"
            }
        }
    }
}

ARR

android {
    defaultConfig {
        project.archivesBaseName = "xxxxx"
        project.version = android.defaultConfig.versionName + "." + android.defaultConfig.versionCode         
    }

    libraryVariants.all { variant ->
        variant.outputs.all { output ->
            if (output.outputFileName != null && output.outputFileName.endsWith('.aar')) {
                outputFileName = "${archivesBaseName}-${version}.aar"
            }
        }
    }
}
โš ๏ธ **GitHub.com Fallback** โš ๏ธ