Programming/Android

'Open Source License' Activity plugin 적용하기

YK Choi 2021. 10. 14. 18:41

앱을 배포할 때, 

오픈소스 라이선스는 Apache Lisence 2.0에도 고지의 의무가 있고 이를 무시하면 법적인 이슈를 받을 수도 있다.

이를 위해서 사용한 오픈 소스를 검토하고, 이를 앱 내에서 리스트로 보여주는 것은 여간 귀찮은 일이 아니다.

 

이를 위해 Google Play services에서 매우 쉽게 구현할 수 있는 plugin을 제공한다. (oss licenses plugin)

원문 링크 : https://developers.google.com/android/guides/opensource

 

Include open source notices  |  Google Play services  |  Google Developers

Google Play services sometimes includes, or depends upon, open source libraries. To comply with the license requirements of open source libraries, you as a developer are responsible for appropriately displaying the notices for the open source libraries tha

developers.google.com

 

사용법

1. gradle.build(프로젝트)의 dependency에 아래와 같이 추가

dependencies {
    classpath 'com.google.android.gms:oss-licenses-plugin:0.10.4'
}

 

2. gradle.build(모듈)의 Plugin에 아래와 같이 추가

plugins {
    id 'com.google.android.gms.oss-licenses-plugin'
}

 

3. gradle.build(모듈)의 dependency에 아래와 같이 추가

   

//open source notices
implementation("com.google.android.gms:play-services-oss-licenses:17.0.0")

 

4. Gradle 파일과 Sync를 맞추면 이제 어느 Activity 에서든 아래와 같이 '라이선스 액티비티'를 호출할 수 있다.

 

startActivity(Intent(this, OssLicensesMenuActivity::class.java))

여기까지만 해도 최소한의 기능은 들어가게 되는데, 나는 추가로 UI 커스텀을 했다.

 

UI 커스텀

    1. Actionbar에 제목 커스텀

startActivity(Intent(this, OssLicensesMenuActivity::class.java))
OssLicensesMenuActivity.setActivityTitle("오픈소스 라이선스")

위와 같이 Actionbar에 "오픈소스 라이선스" 라는 제목을 넣어주었다. 사용자가 어떤 화면인지 다시 한번 인지시켜준다.

default Theme이 NoActionbar이면 안보여서 의미가 없으니 주의하자.

 

    2. Theme 커스텀

Actionbar의 배경색, Actionbar의 Text, ImageButton의 색깔, Listview item의 Text 등을 Theme에서 커스텀할 수 있다.

 

<style name="OpenSourceMenuTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimaryDark">@color/black</item>
        <item name="colorPrimary">@color/kus_primary_100</item>
        <item name="colorPrimaryVariant">@color/white</item>
        <item name="colorOnPrimary">@color/white</item>

        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/kus_primary_100</item>
        <item name="colorOnSecondary">@color/black</item>

        <!-- Status bar color. -->
        <item name="android:statusBarColor">@color/white</item>
        <item name="android:windowLightStatusBar">true</item>
    </style>

 

어떤 항목에 어떤 색깔을 넣어야 좋을지는 아래의 사진을 참고하자

이제 이렇게 적용한 style을 manifests 파일에서 Activity에 적용하면 된다.

 

<activity
        android:name="com.google.android.gms.oss.licenses.OssLicensesMenuActivity"
        android:theme="@style/OpenSourceMenuTheme" />

 

    3. 화면 전환 시 Animation 효과

OssLicensesMenuActivity에서는 리스트뷰가 있는데 그것을 클릭하면 라이센스를 상세히 보는

OssLisenseActivity로 넘어간다.(이 기능까지 플러그인에 내장되어 있다)

 

그런데 나는 OssLicensesMenuActivity -> OssLicensesActivity 로 넘어갈 때 오른쪽으로 이동한다는 애니메이션 효과를 주고 싶었다.

(default로는 아래에서 올라오는 애니메이션인데, 이 상황에서는 사용자입장에서 자연스럽지 않다고 느껴졌다.)

 

이 Activity들을 내가 직접 커스텀할 수 있으면 overridePendingTransition() 을 쓸 수 있겠지만!!!

이 Activity들의 소스코드를 보면 알겠지만 final 키워드로 상속을 막아 놓았다ㅋㅋ

따라서 Theme을 이용해서 커스텀해보자.

 

나는 OssLicensesActivity의 style만을 수정해서 해결하였다.

 

<style name="OpenSourceItemAnimation">
    <item name="android:activityOpenEnterAnimation">@anim/anim_slide_right_enter</item>
    <item name="android:activityOpenExitAnimation">@anim/anim_slide_right_exit</item>
    <item name="android:activityCloseEnterAnimation">@anim/anim_slide_left_enter</item>
    <item name="android:activityCloseExitAnimation">@anim/anim_slide_left_exit</item>
</style>

<style name="OpenSourceItemTheme" parent="OpenSourceMenuTheme">
        <item name="android:windowAnimationStyle">@style/OpenSourceItemAnimation</item>
</style>

위와 같이 "OpenSourceItemAnimation"이라는 새로운 style을 정의하고, 

"OpenSourceItemTheme"에서 windowAnimationStyle로 적용한다. 이 Theme은 아까 만들었던 OpenSourceMenuTheme을 parent로 두어 중복되는 코드를 없앴다.

 

이제 이 Theme을 Manifests 파일에서 OssLicensesActivity에서 사용하겠다는 명시를 해주면 된다.

<activity
        android:name="com.google.android.gms.oss.licenses.OssLicensesActivity"
        android:theme="@style/OpenSourceItemTheme" />

 

시연 영상

 

 

추가 정보

animation관련 xml파일은 res -> anim 폴더에 아래와 같이 추가하면 된다.

 

- anim_slide_right_enter.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="100%"
        android:fromYDelta="0%"
        android:toXDelta="0%"
        android:toYDelta="0%" />
</set>

- anim_slide_left_enter.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:duration="300"
        android:fromXDelta="-100%"
        android:fromYDelta="0%"
        android:toXDelta="0%"
        android:toYDelta="0%" />
</set>

- anim_slide_right_exit.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="-100%"
        android:toYDelta="0%" />
</set>

- anim_slide_left_exit.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:duration="300"
        android:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="100%"
        android:toYDelta="0%" />
</set>

이 xml파일들에 대한 이해는 어렵지 않다.

 

X 축은 가로축이며 -100%이면 왼쪽끝, 100%이면 오른쪽 끝이다.

예를 들어 fromXDelta가 0%이고, toXDelta가 "100%"이면 오른쪽으로 넘어가는 애니메이션인 것이다.

이것을 사라지는 Activity에 적용할지, foreground에 올라오는 Activity에 적용할 지 잘 생각해서 세팅하면 된다.

 

추가로 사라지는 Activity에 투명도에에 변경을 두거나(alpha), 크기를 줄이는 (scale) 애니메이션도 동시에 둘 수 있는데,

자세한 것은 시간남을때 다시 포스팅 하겠다.

 

 

전체 소스코드는 여기에서 볼 수 있다.

https://github.com/KU-Stacks/KU-Ring-Android

 

GitHub - KU-Stacks/KU-Ring-Android

Contribute to KU-Stacks/KU-Ring-Android development by creating an account on GitHub.

github.com