Generate License Document with license-tool-plugin

WindSekirun (wind.seo)·2022년 4월 26일
0

이 글은 기존 운영했던 WordPress 블로그인 PyxisPub: Development Life (pyxispub.uzuki.live) 에서 가져온 글 입니다. 모든 글을 가져오지는 않으며, 작성 시점과 현재 시점에는 차이가 많이 존재합니다.

작성 시점: 2018-06-17

도입

안드로이드 앱을 개발하거나, 심지어 어떠한 프로그램을 개발할 때에 오픈소스 라이브러리는 필수화가 되었다. 사용하는 개발자(End-Developer) 입장에서는 그 기능을 위해 사용하는 시간을 줄일 수도 있고, 오히려 앱의 기능적인 부분의 향상을 가져올 수 있기도 하다.

이 오픈 소스 라이브러리를 사용하기 위해서는 각 라이브러리가 추구하고 있는 오픈 소스 라이센스의 조항을 따를 필요가 있는데, 주로 Apache License, MIT, LGPL, GPL 등 유명한 오픈 소스 라이센스를 많이 쓰고, 어떤 개발자는 <a href="http://www.wtfpl.net" rel="nofollow">Do What the Fuck You Want to Public License</a> (너가 x대로 굴릴 수 있는 공개 라이센스) 라는 라이센스를 쓰기도 한다.

위에서 예를 든 WTFPL 말고 4개 라이센스는 공통적인 조항을 가지고 있는데, 바로 라이센스 사용에 대한 고지 사항을 프로그램 내에 고지하는 것이다.


사진 출처: https://www.bignerdranch.com/blog/open-source-licenses-and-android/

위와 같이 별도 화면인 팝업을 띄워 사용한 오픈소스 소프트웨어의 종류, 라이센스의 이름, 라이센스 사본을 표시하는 것이다.

최근 앱을 개발하면서 라이브러리를 쓰는 일이 일상 다반사가 되었는데, Gradle 에 Dependencies 에 나온 implementation 수를 세보면 30개를 넘는 경우가 많다.

이 때 앱 내에 라이선스를 고지해야 될 때가 온다면 상당히 피곤할 것이다. 그래서, 이를 해결하기 위해 Gradle 의 Dependencies 를 분석해서 자동으로 라이센스 고지 html를 만들어주는 플러그인이 나왔는데, 그 중 그나마 괜찮게 나오는 것이 오늘 소개할 license-tools-plugin (https://github.com/cookpad/license-tools-plugin) 이다.

플러그인 불러오기

buildscript {
repositories {
jcenter()
}

dependencies {
    classpath 'com.cookpad.android.licensetools:license-tools-plugin:1.3.0'
}

}

apply plugin: 'com.cookpad.android.licensetools'

build.gradle 에 classpath를 적고, apply plugin 에 해당 플러그인을 적는다.

라이센스 체크하기

해당 플러그인을 적용하면 크게 2개의 gradlew task 가 생긴다. checkLicensesgenerateLicensePage 가 주인공이다. 첫 번째 Task는 build.gradle 의 dependencies 를 전부 검사하여 리스트를 출력하는 것이고, 두 번째 generateLicensePage 는 밑에서 생성할 license.yml 를 기반으로 html 파일을 만드는 것이다.

checkLicenses 를 실행하면, # Libraries not listed 라는 문구 밑에 yml 형식의 텍스트가 나온다.


이 내용들을 app/license.yml 로 옮겨적는다.

그러면 copyrightHolder, license 가 비어있는 경우가 있을텐데 이 부분 만큼은 수동으로 적어야 한다. 상당히 귀찮지만, 일단 https://gist.github.com/WindSekirun/85a25ca5ed602e21295c580fc4cff433 이쪽에 최근 앱 만들 때 사용했던 licenses.yml 가 있다. 필요한 정보는 모두 채워넣었으니 사용하면 될 것 같다.

그렇게 licenses.yml 를 작성하고 나면, 라이센스 파일을 생성할 준비가 모두 되었다.

라이센스 문서 만들기

generateLicensePage 를 실행하면, app/src/main/assets 에 licenses.html 파일이 생성된다.

오류 해결: 프로젝트를 여러 개 두고 있는 프로젝트의 경우

흔히 implementation project(path: ':BaseApp') 방식으로 프로젝트를 dependencies 로 추가하는데, 이럴 경우 checkLicenses, generateLicensePage 를 실행할 경우 configuration 오류로 실행이 되지 않는다. 해당 문제는 아래 코드를 사용하여 프로젝트를 dependencies 로 추가하면 된다.

if (project.gradle.startParameter.taskNames.contains("checkLicenses") ||
            project.gradle.startParameter.taskNames.contains("generateLicensePage")) {
        implementation project(path: ':BaseApp', configuration: 'default')
    } else {
        implementation project(path: ':BaseApp')
    }

마무리

중간 license.yml 을 채워넣는건 찾아서 넣어야 하기에 귀찮지만, 적어도 스캔을 해준다는 점에서는 일거리를 약간이라도 줄일 수 있지 않을까 싶다.

profile
Android Developer @kakaobank

0개의 댓글