Skip to content

Commit 4a62aff

Browse files
Add OSS Licenses Plugin to Display Open Source Licenses (#4022)
### Commit Message - Integrated Google OSS Licenses Plugin to display the licenses of third-party libraries used in the app. - Added the plugin to app-level Gradle file and included the required dependencies. - Created a pre-built activity (`OssLicensesMenuActivity`) to show the licenses, accessible via a button/menu. - Verified the implementation, ensuring the licenses are displayed correctly. - Tested on release builds to confirm functionality and compliance. This implementation ensures transparency and complies with open-source license requirements.
1 parent c78e624 commit 4a62aff

File tree

7 files changed

+55
-1
lines changed

7 files changed

+55
-1
lines changed

V2rayNG/app/build.gradle.kts

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
plugins {
22
alias(libs.plugins.android.application)
33
alias(libs.plugins.kotlin.android)
4+
id("com.google.android.gms.oss-licenses-plugin")
45
}
56

67
android {
@@ -145,4 +146,6 @@ dependencies {
145146
androidTestImplementation(libs.androidx.espresso.core)
146147
testImplementation(libs.org.mockito.mockito.inline)
147148
testImplementation(libs.mockito.kotlin)
149+
// Oss Licenses
150+
implementation(libs.play.services.oss.licenses)
148151
}

V2rayNG/app/src/main/java/com/v2ray/ang/ui/AboutActivity.kt

+5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import com.v2ray.ang.util.ZipUtil
2020
import java.io.File
2121
import java.text.SimpleDateFormat
2222
import java.util.Locale
23+
import com.google.android.gms.oss.licenses.OssLicensesMenuActivity
24+
2325

2426
class AboutActivity : BaseActivity() {
2527
private val binding by lazy { ActivityAboutBinding.inflate(layoutInflater) }
@@ -87,6 +89,9 @@ class AboutActivity : BaseActivity() {
8789
binding.layoutFeedback.setOnClickListener {
8890
Utils.openUri(this, AppConfig.v2rayNGIssues)
8991
}
92+
binding.layoutOssLicenses.setOnClickListener{
93+
startActivity(Intent(this, OssLicensesMenuActivity::class.java))
94+
}
9095

9196
binding.layoutTgChannel.setOnClickListener {
9297
Utils.openUri(this, AppConfig.TgChannelUrl)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="960"
5+
android:viewportHeight="960"
6+
android:tint="?attr/colorControlNormal">
7+
<path
8+
android:fillColor="@android:color/white"
9+
android:pathData="M480,520Q430,520 395,485Q360,450 360,400Q360,350 395,315Q430,280 480,280Q530,280 565,315Q600,350 600,400Q600,450 565,485Q530,520 480,520ZM240,920L240,611Q202,569 181,515Q160,461 160,400Q160,266 253,173Q346,80 480,80Q614,80 707,173Q800,266 800,400Q800,461 779,515Q758,569 720,611L720,920L480,840L240,920ZM480,640Q580,640 650,570Q720,500 720,400Q720,300 650,230Q580,160 480,160Q380,160 310,230Q240,300 240,400Q240,500 310,570Q380,640 480,640ZM320,801L480,760L640,801L640,677Q605,697 564.5,708.5Q524,720 480,720Q436,720 395.5,708.5Q355,697 320,677L320,801ZM480,739L480,739Q480,739 480,739Q480,739 480,739Q480,739 480,739Q480,739 480,739L480,739L480,739Z"/>
10+
</vector>

V2rayNG/app/src/main/res/layout/activity_about.xml

+24
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,30 @@
135135
android:textAppearance="@style/TextAppearance.AppCompat.Subhead" />
136136
</LinearLayout>
137137

138+
<LinearLayout
139+
android:id="@+id/layout_oss_licenses"
140+
android:layout_width="match_parent"
141+
android:layout_height="@dimen/server_height"
142+
android:background="?attr/selectableItemBackground"
143+
android:clickable="true"
144+
android:focusable="true"
145+
android:gravity="center|start"
146+
android:orientation="horizontal"
147+
android:padding="@dimen/padding">
148+
149+
<ImageView
150+
android:layout_width="@dimen/png_height"
151+
android:layout_height="@dimen/png_height"
152+
app:srcCompat="@drawable/license_24px" />
153+
154+
<TextView
155+
android:layout_width="wrap_content"
156+
android:layout_height="wrap_content"
157+
android:paddingStart="@dimen/padding_start"
158+
android:text="@string/title_oss_license"
159+
android:textAppearance="@style/TextAppearance.AppCompat.Subhead" />
160+
</LinearLayout>
161+
138162
<LinearLayout
139163
android:id="@+id/layout_feedback"
140164
android:layout_width="match_parent"

V2rayNG/app/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@
214214
<string name="title_privacy_policy">Privacy policy</string>
215215
<string name="title_about">About</string>
216216
<string name="title_source_code">Source code</string>
217+
<string name="title_oss_license">Open Source licenses</string>
217218
<string name="title_tg_channel">Telegram channel</string>
218219
<string name="title_configuration_backup">Backup configuration</string>
219220
<string name="summary_configuration_backup">Storage location: [%s], The backup will be cleared after uninstalling the app or clearing the storage</string>

V2rayNG/build.gradle.kts

+8-1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,11 @@ plugins {
33
alias(libs.plugins.android.application) apply false
44
alias(libs.plugins.android.library) apply false
55
alias(libs.plugins.kotlin.android) apply false
6-
}
6+
}
7+
8+
buildscript {
9+
dependencies {
10+
classpath(libs.oss.licenses.plugin)
11+
}
12+
}
13+

V2rayNG/gradle/libs.versions.toml

+4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ activity = "1.9.3"
1111
constraintlayout = "2.2.0"
1212
mmkvStatic = "1.3.9"
1313
gson = "2.11.0"
14+
ossLicensesPlugin = "0.10.6"
15+
playServicesOssLicenses = "17.1.0"
1416
rxjava = "3.1.9"
1517
rxandroid = "3.0.2"
1618
rxpermissions = "0.12"
@@ -36,6 +38,8 @@ androidx-activity = { group = "androidx.activity", name = "activity", version.re
3638
androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
3739
mmkv-static = { module = "com.tencent:mmkv-static", version.ref = "mmkvStatic" }
3840
gson = { module = "com.google.code.gson:gson", version.ref = "gson" }
41+
oss-licenses-plugin = { module = "com.google.android.gms:oss-licenses-plugin", version.ref = "ossLicensesPlugin" }
42+
play-services-oss-licenses = { module = "com.google.android.gms:play-services-oss-licenses", version.ref = "playServicesOssLicenses" }
3943
rxjava = { module = "io.reactivex.rxjava3:rxjava", version.ref = "rxjava" }
4044
rxandroid = { module = "io.reactivex.rxjava3:rxandroid", version.ref = "rxandroid" }
4145
rxpermissions = { module = "com.github.tbruyelle:rxpermissions", version.ref = "rxpermissions" }

0 commit comments

Comments
 (0)