+
+
+### Telegram Channel
+[github_2dust](https://t.me/github_2dust)
+
+### Usage
+
+#### Geoip and Geosite
+- geoip.dat and geosite.dat files are in `Android/data/com.v2ray.ang/files/assets` (path may differ on some Android device)
+- download feature will get enhanced version in this [repo](https://github.com/Loyalsoldier/v2ray-rules-dat) (Note it need a working proxy)
+- latest official [domain list](https://github.com/v2fly/domain-list-community) and [ip list](https://github.com/v2fly/geoip) can be imported manually
+- possible to use third party dat file in the same folder, like [h2y](https://guide.v2fly.org/routing/sitedata.html#%E5%A4%96%E7%BD%AE%E7%9A%84%E5%9F%9F%E5%90%8D%E6%96%87%E4%BB%B6)
+
+### More in our [wiki](https://github.com/2dust/v2rayNG/wiki)
+
+### Development guide
+
+Android project under V2rayNG folder can be compiled directly in Android Studio, or using Gradle wrapper. But the v2ray core inside the aar is (probably) outdated.
+The aar can be compiled from the Golang project [AndroidLibV2rayLite](https://github.com/2dust/AndroidLibV2rayLite) or [AndroidLibXrayLite](https://github.com/2dust/AndroidLibXrayLite).
+For a quick start, read guide for [Go Mobile](https://github.com/golang/go/wiki/Mobile) and [Makefiles for Go Developers](https://tutorialedge.net/golang/makefiles-for-go-developers/)
+
+v2rayNG can run on Android Emulators. For WSA, VPN permission need to be granted via
+`appops set [package name] ACTIVATE_VPN allow`
diff --git a/V2rayNG/.gitignore b/V2rayNG/.gitignore
new file mode 100644
index 00000000..16eb6ec8
--- /dev/null
+++ b/V2rayNG/.gitignore
@@ -0,0 +1,10 @@
+*.iml
+.gradle
+/local.properties
+/.idea
+.DS_Store
+/build
+/captures
+*.apk
+signing.properties
+*.aar
diff --git a/V2rayNG/app/.gitignore b/V2rayNG/app/.gitignore
new file mode 100644
index 00000000..2abde4aa
--- /dev/null
+++ b/V2rayNG/app/.gitignore
@@ -0,0 +1,2 @@
+/build
+/google-services.json
diff --git a/V2rayNG/app/build.gradle b/V2rayNG/app/build.gradle
new file mode 100644
index 00000000..3600fe3b
--- /dev/null
+++ b/V2rayNG/app/build.gradle
@@ -0,0 +1,151 @@
+apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
+
+Properties props = new Properties()
+props.load(new FileInputStream(new File('local.properties')))
+
+android {
+ compileSdkVersion Integer.parseInt("$compileSdkVer")
+ buildToolsVersion "$buildToolsVer"
+
+ compileOptions {
+ targetCompatibility = "8"
+ sourceCompatibility = "8"
+ }
+
+ defaultConfig {
+ applicationId "com.v2ray.ang"
+ minSdkVersion 21
+ targetSdkVersion Integer.parseInt("$targetSdkVer")
+ multiDexEnabled true
+ versionCode 495
+ versionName "1.7.33"
+ }
+
+ if (props["sign"]) {
+ signingConfigs {
+ release {
+ storeFile file("../key.jks")
+ keyAlias 'ang'
+ keyPassword '123456'
+ storePassword '123456'
+ }
+ debug {
+ storeFile file("../key.jks")
+ keyAlias 'ang'
+ keyPassword '123456'
+ storePassword '123456'
+ }
+ }
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ zipAlignEnabled false
+ shrinkResources false
+ if (props["sign"]) {
+ signingConfig signingConfigs.release
+ }
+ ndk.abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
+// proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ debug {
+ minifyEnabled false
+ zipAlignEnabled false
+ shrinkResources false
+ if (props["sign"]) {
+ signingConfig signingConfigs.release
+ }
+ ndk.abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
+ }
+ }
+
+ sourceSets {
+ main {
+ jniLibs.srcDirs = ['libs']
+ java.srcDirs += 'src/main/kotlin'
+ }
+ }
+
+ kotlinOptions {
+ jvmTarget = JavaVersion.VERSION_1_8
+ }
+
+ splits {
+ abi {
+ enable true
+ reset()
+ include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' //select ABIs to build APKs for
+ universalApk true //generate an additional APK that contains all the ABIs
+ }
+ }
+
+ // map for the version code
+ project.ext.versionCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, 'x86_64': 4]
+
+ android.applicationVariants.all { variant ->
+ // assign different version code for each output
+ variant.outputs.each { output ->
+ output.outputFileName = "v2rayNG_" + variant.versionName + "_" + output.getFilter(com.android.build.OutputFile.ABI) + ".apk"
+
+ output.versionCodeOverride =
+ project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) *
+ 1000000 + android.defaultConfig.versionCode
+ }
+ }
+
+ buildFeatures {
+ viewBinding true
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
+ testImplementation 'junit:junit:4.13.2'
+
+ // Androidx
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+ implementation 'androidx.legacy:legacy-support-v4:1.0.0'
+ implementation 'androidx.appcompat:appcompat:1.4.2'
+ implementation 'com.google.android.material:material:1.6.1'
+ implementation 'androidx.cardview:cardview:1.0.0'
+ implementation 'androidx.preference:preference-ktx:1.2.0'
+ implementation 'androidx.recyclerview:recyclerview:1.2.1'
+ implementation 'androidx.fragment:fragment-ktx:1.5.2'
+ implementation 'androidx.multidex:multidex:2.0.1'
+ implementation 'androidx.viewpager2:viewpager2:1.1.0-beta01'
+
+ // Androidx ktx
+ implementation 'androidx.activity:activity-ktx:1.5.1'
+ implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1'
+ implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.1'
+ implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
+
+ //kotlin
+ implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion"
+ implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2"
+ implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2"
+
+ implementation 'com.tencent:mmkv-static:1.2.12'
+ implementation 'com.google.code.gson:gson:2.8.9'
+ implementation 'io.reactivex:rxjava:1.3.4'
+ implementation 'io.reactivex:rxandroid:1.2.1'
+ implementation 'com.tbruyelle.rxpermissions:rxpermissions:0.9.4@aar'
+ implementation 'me.dm7.barcodescanner:core:1.9.8'
+ implementation 'me.dm7.barcodescanner:zxing:1.9.8'
+ implementation 'com.github.jorgecastilloprz:fabprogresscircle:1.01@aar'
+ implementation 'me.drakeet.support:toastcompat:1.1.0'
+ implementation 'com.blacksquircle.ui:editorkit:2.1.1'
+ implementation 'com.blacksquircle.ui:language-base:2.1.1'
+ implementation 'com.blacksquircle.ui:language-json:2.1.1'
+}
+
+//buildscript {
+// repositories {
+// google()
+// mavenCentral()
+// maven { url 'https://maven.google.com' }
+// maven { url 'https://jitpack.io' }
+// }
+//}
diff --git a/V2rayNG/app/libs/arm64-v8a/libtun2socks.so b/V2rayNG/app/libs/arm64-v8a/libtun2socks.so
new file mode 100644
index 0000000000000000000000000000000000000000..3dbdde7ad453ddc30c3e5e6414f0771a6a19d856
GIT binary patch
literal 152232
zcmd44ePGnpmH&Sy6JQde1_&AvWl+!r!h^_jgAC!p@Ek*|)Y2xCWWoeO5|RlIiX|x9
z#zMPHOD$_rqq5s1#Vu`dmvq?`A9j~k+G0z)bieGk5$SFe_FJrIlP)yh*SVkjnfc6z
z47lI@{qg&>!}-knKA(H;Ip>~xCvIQ3Y*C8GqwL44{#MDiG0#{?z$COSO)+mu1=LKH
z&c7qoZE7HBDxZK!b<@eFm`!~qpBF0S>P@$m;_u9#S8E|BD@)zBJ_3S?_jry!wOGuHO|zMqH~_8PCvuGTe{^m&%6p
zlYdl_{4%os>YttjpPK}KAPK%A3I6FMcy$uIJ_)`#3BDr<{!|kDn@R9zli(dm@WV;)
zSCil;lHk8cg8zFG{J)am0}!D8=66UEd}Io^JD2z%-05jd~jC+RQ7bB(KpmJY>jz4Il0yb!U_dQEU~{m
z>h;_p?MO|Jds5R&jgGIbDs612P?N+bvHl@)GjT1>TvPeP#&8hLAuF_TlKfkW5Qf!e
zW$O`3N#WYyx7pD^(ZO1GrK^A*vei(6Z8h_R^Bs=@*}
f__-7O$W#66X-Pjo`U%o^OZzUl$^&|n^qIR^4+HqpuOATKzsWpYBL9LY
z@^qEl$Mv7oJ2D5o^ELbn$>)}P*ZHc9ZyEV3zmEUo(o>b-d%uDHB9Hw@{%znb;7&au
z{o4!P3|=PnT-C1SS8Mqv-;r-7w=-u*5A5sT&PY3#Ngv4_*JHfL=ijM)B|)j@$9R9)
zmeu6Zx+^_Nvy~S{7yw*7A4=KSyLm&J{eK0Q3J^n_rF6@ku+j
zrDghSxzVx)y;m4_cdE6wBX-m2^o1GfB)2oe}Ve+d>!T3;{ZD1>kqx+!4C*MWs_i^Zm9Ro{@S0@ugrm4f~-p#
z$t@lur+5(m^7%J