สร้างหน้า Open Source Notices บน Android Application

Android May 28, 2021

พอดีมีเหตุที่แอพทั้งออฟฟิศต้องทำ แล้วก็สงสัยด้วยแหละว่าจริงๆต้องทำยังไง ต้องทำเองไหม ต้องเอา license มาจากไหน บลาๆ

แล้วหัวหน้าก็ส่ง link นี้มา เป็น document ของทาง Google Play Service

Include open source notices | Google Play services | Google Developers
https://developers.google.com/android/guides/opensource

ก็เลยลองมาทำดูดีกว่าาาา~~~~

ถ้าถามว่า iOS มีไหม ก็อันนี้เลยจ้า
[iOS]สร้างหน้า Acknowledgements สำหรับ Third-party library ใน iOS Application
เคยไหมครับ ที่กำลังเล่นแอพต่างๆอยู่ดีๆ ก็เปิดไปเจอหน้าที่เขียนว่า Third-party notices / acknowledgements พร้อมกับรายละเอียด open-source library ที่แอพเหล่านั้นใช้ ซึ่ง License บางประเภทเช่น MIT…

ขั้นตอนการใส่ Open Source License ในแอพของเรา

ไปที่ build.gradle ของโปรเจก และทำการใส่ 2 สิ่งก็คือ Google Maven repository และ oss-licenses plugin

buildscript {
  repositories {
    ...
    google()  // maven { url "https://maven.google.com" } for Gradle <= 3
  }
  dependencies {
    ...
    classpath 'com.google.android.gms:oss-licenses-plugin:0.10.4'
  }
}

จากนั้นไปที่ app/build.gradle ถึงเราจะทำโปรเจก modular แล้วเปิดผ่าน module อื่น เราก็ต้องใส่ในนี้อยู่ดีจ้า เพราะเราจะใส่ในชั้น module application เนอะ

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

ใส่เสร็จแล้วไปใส่ dependency ของเจ้า oss-license ใน module ที่เราต้องการกดเปิด โดยใส่เข้าไปดังนี้

implementation 'com.google.android.gms:play-services-oss-licenses:17.0.0'

ทำการ sync gradle 1 ทีเบาๆ ให้เรียบร้อย

จากนั้นทำการเรียก Activity ที่แสดง dependency ในโปรเจกทั้งหมดที่เราใช้ เราจะทำ view นึงเพื่อกดเข้าไปดูสิ่งนี้ ข้างในจะใส่ไปอย่างนี้เนอะ

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

ผลที่ได้คือ เมื่อกดเข้าไปใน view นี้แล้ว มันจะแสดง dependency ที่เราใช้ในโปรเจกทั้งหมดเป็น list และเมื่อเรากดเข้าไปดู เราก็จะเห็น license ของ open source ตัวนั้นๆ

ยกตัวอย่างอันนึงที่เราใช้แล้วกัน คือ com.akexorcist:localization นั่นเอง เมื่อกดเข้าไปดูจะพบว่า คุณเอกใช้ Apache License

มาเปิดดูใน repo สิว่าจริงไหม

akexorcist/Localization
[Android] In-app language changing library. Contribute to akexorcist/Localization development by creating an account on GitHub.
https://github.com/akexorcist/Localization

พบว่ามันสามารถดึงมาตรงกันเนอะ

ทำให้เราได้รู้ว่า ถ้าเราทำ library ที่เป็น open source นั้น การใส่ license นั้นสำคัญมากๆเลยหล่ะ

แล้วมันดึงมาได้ยังไงกันนะ?

ตอนเวลา compile ตัว Gradle plugin มันจะสแกน POM dependencies ในโปรเจกของเรา เมื่อเจอ dependency แล้ว มันจะดึง license ในนั้นออกมา แล้วใส่ลิ้งเข้าไปในแอพของเรานั่นเอง

เท่าที่อ่าน คนอ่านรู้สึกอะไรขัดใจๆไหมนะ?

การปรับ style และ title

แน่นอนว่า เราเอาไปแปะในงานที่ทำอยู่จริง แล้ว Toolbar ไม่ขึ้นเหมือนใน Document เขาอ่ะ เนื่องจากโปรเจกเราใช้ theme ที่ NoActionBar นั่นเอง ดังนั้นการ custom style ของหน้านี้นั้น เราจะต้องไปทำที่ AndroidManifest.xml ใน module เมื่อสักครู่ที่เราเปิดหน้า Open source licenses ออกมา

<activity
            android:name="com.google.android.gms.oss.licenses.OssLicensesMenuActivity"
            android:theme="@style/Theme.AppCompat.Light" />
        <activity
            android:name="com.google.android.gms.oss.licenses.OssLicensesActivity"
            android:theme="@style/Theme.AppCompat.Light" />

ผลที่ได้จะออกมาสวยงามหล่ะ

และถ้าเราไม่พอใจชื่อบน Toolbar ด้านบน สามารถเข้าไปเปลี่ยนได้ แบบนี้

OssLicensesMenuActivity.setActivityTitle(
    getString(R.string.custom_license_title)
)

ผลสุดท้าย

เราก็จะได้ list ของ dependency ทั้งหมดที่เราใช้ และสามารถกดไปในแต่ละตัวเพื่อดู license ได้นะ อาจจะมาให้เราอ่านยาวๆ หรือเป็นลิ้งสั้นๆก็ได้เนอะ ตามแต่เจ้าของ library ที่เราใช้

หวังว่าจะได้ประโยชน์กัน เผื่อใครต้องทำอะไรแบบนี้จะได้เริ่มถูกเนอะ


download แอพอ่านบล็อกใหม่ของเราได้ที่นี่

MikkiPastel - Apps on Google Play
First application from “MikkiPastel” on play store beta feature- read blog from https://www.mikkipastel.com by this application- read blog content by chrome custom tab- update or refresh new content by pull to refresh- share content to social network
https://play.google.com/store/apps/details?id=com.mikkipastel.blog

ติดตามข่าวสารและบทความใหม่ๆได้ที่

อย่าลืมกด like กด share บทความกันด้วยนะคะ :)

Posted by MikkiPastel on Sunday, 10 December 2017

ช่องทางใหม่ใน Twiter จ้า

และ YouTube ช่องใหม่จ้า

mikkicoding
Android Developer & Content Creator
https://www.youtube.com/channel/UCtGbMSe4i7NJiKQ271Fezcg

Tags

Minseo Chayabanjonglerd

I am a full-time Android Developer and part-time contributor with developer community and web3 world, who believe people have hard skills and soft skills to up-skill to da moon.