(migrate) migrate some minor things to kotlin
Signed-off-by: androidacy-user <opensource@androidacy.com>master
parent
ba070d5d4a
commit
47eff4e5c4
@ -1,481 +0,0 @@
|
|||||||
import io.sentry.android.gradle.extensions.InstrumentationFeature
|
|
||||||
import com.android.build.OutputFile
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
// Gradle doesn't allow conditionally enabling/disabling plugins
|
|
||||||
id "io.sentry.android.gradle"
|
|
||||||
id 'com.android.application'
|
|
||||||
id 'com.mikepenz.aboutlibraries.plugin'
|
|
||||||
id 'org.jetbrains.kotlin.android'
|
|
||||||
id 'org.jetbrains.kotlin.kapt'
|
|
||||||
}
|
|
||||||
|
|
||||||
apply plugin: "realm-android"
|
|
||||||
|
|
||||||
android {
|
|
||||||
namespace "com.fox2code.mmm"
|
|
||||||
compileSdk 33
|
|
||||||
ndkVersion "25.2.9519653"
|
|
||||||
signingConfigs {
|
|
||||||
release {
|
|
||||||
// Everything comes from local.properties
|
|
||||||
Properties properties = new Properties()
|
|
||||||
if (project.rootProject.file('local.properties').exists()) {
|
|
||||||
properties.load(project.rootProject.file('local.properties').newDataInputStream())
|
|
||||||
// java.lang.IllegalArgumentException: path may not be null or empty string. path='null'
|
|
||||||
if (properties.getProperty('keystore.file') != null) {
|
|
||||||
// FFS DO NOT CHANGE THIS, IT WILL BREAK THE BUILD
|
|
||||||
storeFile file(properties.getProperty('keystore.file'))
|
|
||||||
storePassword properties.getProperty('keystore.password')
|
|
||||||
keyAlias 'key0'
|
|
||||||
keyPassword properties.getProperty('keystore.password')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
enableV3Signing = true
|
|
||||||
enableV4Signing = true
|
|
||||||
enableV1Signing = true
|
|
||||||
enableV2Signing = true
|
|
||||||
}
|
|
||||||
debug {
|
|
||||||
// Everything comes from local.properties
|
|
||||||
Properties properties = new Properties()
|
|
||||||
if (project.rootProject.file('local.properties').exists()) {
|
|
||||||
properties.load(project.rootProject.file('local.properties').newDataInputStream())
|
|
||||||
// java.lang.IllegalArgumentException: path may not be null or empty string. path='null'
|
|
||||||
if (properties.getProperty('keystore.file') != null) {
|
|
||||||
// FFS DO NOT CHANGE THIS, IT WILL BREAK THE BUILD
|
|
||||||
storeFile file(properties.getProperty('keystore.file'))
|
|
||||||
storePassword properties.getProperty('keystore.password')
|
|
||||||
keyAlias 'key0'
|
|
||||||
keyPassword properties.getProperty('keystore.password')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
enableV3Signing = true
|
|
||||||
enableV4Signing = true
|
|
||||||
enableV1Signing = true
|
|
||||||
enableV2Signing = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultConfig {
|
|
||||||
applicationId "com.fox2code.mmm"
|
|
||||||
minSdk 24
|
|
||||||
targetSdk 33
|
|
||||||
versionCode 65
|
|
||||||
versionName "2.0.0"
|
|
||||||
archivesBaseName = "FoxMMM-v$versionName"
|
|
||||||
vectorDrawables {
|
|
||||||
useSupportLibrary true
|
|
||||||
}
|
|
||||||
multiDexEnabled true
|
|
||||||
}
|
|
||||||
|
|
||||||
splits {
|
|
||||||
|
|
||||||
// Configures multiple APKs based on ABI.
|
|
||||||
abi {
|
|
||||||
|
|
||||||
// Enables building multiple APKs per ABI.
|
|
||||||
enable true
|
|
||||||
|
|
||||||
// By default all ABIs are included, so use reset() and include to specify that we only
|
|
||||||
// want APKs for x86 and x86_64.
|
|
||||||
|
|
||||||
// Resets the list of ABIs that Gradle should create APKs for to none.
|
|
||||||
reset()
|
|
||||||
|
|
||||||
// Specifies a list of ABIs that Gradle should create APKs for.
|
|
||||||
include "x86", "x86_64", "armeabi-v7a", "arm64-v8a"
|
|
||||||
|
|
||||||
// Specifies that we do not want to also generate a universal APK that includes all ABIs.
|
|
||||||
universalApk true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
buildTypes {
|
|
||||||
release {
|
|
||||||
minifyEnabled true
|
|
||||||
shrinkResources true
|
|
||||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
|
|
||||||
'proguard-rules.pro'
|
|
||||||
signingConfig signingConfigs.release
|
|
||||||
}
|
|
||||||
debug {
|
|
||||||
applicationIdSuffix '.debug'
|
|
||||||
debuggable true
|
|
||||||
signingConfig signingConfigs.debug
|
|
||||||
|
|
||||||
// ONLY FOR TESTING SENTRY
|
|
||||||
// minifyEnabled true
|
|
||||||
// shrinkResources true
|
|
||||||
// proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
flavorDimensions "type"
|
|
||||||
productFlavors {
|
|
||||||
"default" {
|
|
||||||
// debug http requests. do not set this to true if you care about performance!!!!!
|
|
||||||
buildConfigField "boolean", "DEBUG_HTTP", "false"
|
|
||||||
// Latest commit hash as BuildConfig.COMMIT_HASH
|
|
||||||
def gitCommitHash = 'git rev-parse --short HEAD'.execute([], project.rootDir).text.trim()
|
|
||||||
buildConfigField "String", "COMMIT_HASH", "\"${gitCommitHash}\""
|
|
||||||
// Get the current branch name as BuildConfig.BRANCH_NAME
|
|
||||||
def gitBranchName = 'git rev-parse --abbrev-ref HEAD'.execute([], project.rootDir).text.trim()
|
|
||||||
buildConfigField "String", "BRANCH_NAME", "\"${gitBranchName}\""
|
|
||||||
// Get remote url as BuildConfig.REMOTE_URL
|
|
||||||
def gitRemoteUrl = 'git config --get remote.origin.url'.execute([], project.rootDir).text.trim()
|
|
||||||
buildConfigField "String", "REMOTE_URL", "\"${gitRemoteUrl}\""
|
|
||||||
dimension "type"
|
|
||||||
buildConfigField "boolean", "ENABLE_AUTO_UPDATER", "true"
|
|
||||||
buildConfigField "boolean", "DEFAULT_ENABLE_CRASH_REPORTING", "true"
|
|
||||||
buildConfigField "boolean", "DEFAULT_ENABLE_CRASH_REPORTING_PII", "true"
|
|
||||||
buildConfigField "boolean", "DEFAULT_ENABLE_ANALYTICS", "true"
|
|
||||||
Properties propertiesL = new Properties()
|
|
||||||
if (project.rootProject.file('local.properties').exists()) {
|
|
||||||
// grab matomo.url
|
|
||||||
buildConfigField "String", "ANALYTICS_ENDPOINT", '"' + propertiesL.getProperty("matomo.url", "https://s-api.androidacy.com/matomo.php") + '"'
|
|
||||||
} else {
|
|
||||||
buildConfigField "String", "ANALYTICS_ENDPOINT", "https://s-api.androidacy.com/matomo.php"
|
|
||||||
}
|
|
||||||
buildConfigField "boolean", "ENABLE_PROTECTION", "true"
|
|
||||||
if (hasSentryConfig) {
|
|
||||||
Properties properties = new Properties()
|
|
||||||
try (FileInputStream fis = new FileInputStream(sentryConfigFile)) {
|
|
||||||
properties.load(fis)
|
|
||||||
}
|
|
||||||
buildConfigField "String", "SENTRY_TOKEN", '"' + properties.getProperty("auth." + "token") + '"'
|
|
||||||
} else {
|
|
||||||
buildConfigField "String", "SENTRY_TOKEN", '""'
|
|
||||||
}
|
|
||||||
// Get the androidacy client ID from the androidacy.properties
|
|
||||||
|
|
||||||
Properties properties = new Properties()
|
|
||||||
// If androidacy.properties doesn't exist, use the default client ID which is heavily
|
|
||||||
// rate limited to 30 requests per minute
|
|
||||||
if (project.rootProject.file('androidacy.properties').exists()) {
|
|
||||||
properties.load(project.rootProject.file('androidacy.properties').newDataInputStream())
|
|
||||||
} else {
|
|
||||||
properties.setProperty('client_id', '5KYccdYxWB2RxMq5FTbkWisXi2dS6yFN9R7RVlFCG98FRdz6Mf5ojY2fyJCUlXJZ')
|
|
||||||
}
|
|
||||||
buildConfigField("String", "ANDROIDACY_CLIENT_ID", "\"" + properties.getProperty('client_id') + "\"")
|
|
||||||
// If client ID is empty, disable androidacy
|
|
||||||
if (properties.getProperty('client_id').isEmpty()) {
|
|
||||||
buildConfigField("java.util.List<String>",
|
|
||||||
"ENABLED_REPOS", "java.util.Arrays.asList(\"magisk_alt_repo\")")
|
|
||||||
} else {
|
|
||||||
buildConfigField("java.util.List<String>",
|
|
||||||
"ENABLED_REPOS",
|
|
||||||
"java.util.Arrays.asList(\"androidacy_repo\")",)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fdroid {
|
|
||||||
dimension "type"
|
|
||||||
applicationIdSuffix ".fdroid"
|
|
||||||
// debug http requests. do not set this to true if you care about performance!!!!!
|
|
||||||
buildConfigField "boolean", "DEBUG_HTTP", "false"
|
|
||||||
// Latest commit hash as BuildConfig.COMMIT_HASH
|
|
||||||
def gitCommitHash = 'git rev-parse --short HEAD'.execute([], project.rootDir).text.trim()
|
|
||||||
buildConfigField "String", "COMMIT_HASH", "\"${gitCommitHash}\""
|
|
||||||
// Get the current branch name as BuildConfig.BRANCH_NAME
|
|
||||||
def gitBranchName = 'git rev-parse --abbrev-ref HEAD'.execute([], project.rootDir).text.trim()
|
|
||||||
buildConfigField "String", "BRANCH_NAME", "\"${gitBranchName}\""
|
|
||||||
// Get remote url as BuildConfig.REMOTE_URL
|
|
||||||
def gitRemoteUrl = 'git config --get remote.origin.url'.execute([], project.rootDir).text.trim()
|
|
||||||
buildConfigField "String", "REMOTE_URL", "\"${gitRemoteUrl}\""
|
|
||||||
|
|
||||||
// Need to disable auto-updater for F-Droid flavor because their inclusion policy
|
|
||||||
// forbids downloading blobs from third-party websites (and F-Droid APK isn't signed
|
|
||||||
// with our keys, so the APK wouldn't install anyways).
|
|
||||||
buildConfigField "boolean", "ENABLE_AUTO_UPDATER", "false"
|
|
||||||
|
|
||||||
// Disable crash reporting for F-Droid flavor by default
|
|
||||||
buildConfigField "boolean", "DEFAULT_ENABLE_CRASH_REPORTING", "false"
|
|
||||||
buildConfigField "boolean", "DEFAULT_ENABLE_CRASH_REPORTING_PII", "false"
|
|
||||||
buildConfigField "boolean", "DEFAULT_ENABLE_ANALYTICS", "false"
|
|
||||||
Properties propertiesL = new Properties()
|
|
||||||
if (project.rootProject.file('local.properties').exists()) {
|
|
||||||
// grab matomo.url
|
|
||||||
buildConfigField "String", "ANALYTICS_ENDPOINT", '"' + propertiesL.getProperty("matomo.url", "https://s-api.androidacy.com/matomo.php") + '"'
|
|
||||||
} else {
|
|
||||||
buildConfigField "String", "ANALYTICS_ENDPOINT", "https://s-api.androidacy.com/matomo.php"
|
|
||||||
}
|
|
||||||
buildConfigField "boolean", "ENABLE_PROTECTION", "true"
|
|
||||||
|
|
||||||
if (hasSentryConfig) {
|
|
||||||
Properties properties = new Properties()
|
|
||||||
try (FileInputStream fis = new FileInputStream(sentryConfigFile)) {
|
|
||||||
properties.load(fis)
|
|
||||||
}
|
|
||||||
buildConfigField "String", "SENTRY_TOKEN", '"' + properties.getProperty("auth." + "token") + '"'
|
|
||||||
} else {
|
|
||||||
buildConfigField "String", "SENTRY_TOKEN", '""'
|
|
||||||
}
|
|
||||||
|
|
||||||
// Repo with ads or tracking feature are disabled by default for the
|
|
||||||
// F-Droid flavor. at the same time, the alt repo isn't particularly trustworthy
|
|
||||||
buildConfigField("java.util.List<String>",
|
|
||||||
"ENABLED_REPOS",
|
|
||||||
"java.util.Arrays.asList(\"\")",)
|
|
||||||
|
|
||||||
// Get the androidacy client ID from the androidacy.properties
|
|
||||||
Properties properties = new Properties()
|
|
||||||
// If androidacy.properties doesn't exist, use the fdroid client ID which is limited
|
|
||||||
// to 50 requests per minute
|
|
||||||
if (project.rootProject.file('androidacy.properties').exists()) {
|
|
||||||
properties.load(project.rootProject.file('androidacy.properties').newDataInputStream())
|
|
||||||
} else {
|
|
||||||
properties.setProperty('client_id', '"dQ1p7X8bF14PVJ7wAU6ORVjPB2IeTinsuAZ8Uos6tQiyUdUyIjSyZSmN54QBbaTy"')
|
|
||||||
}
|
|
||||||
buildConfigField("String", "ANDROIDACY_CLIENT_ID", properties.getProperty('client_id'))
|
|
||||||
versionNameSuffix '-froid'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
compileOptions {
|
|
||||||
sourceCompatibility JavaVersion.VERSION_17
|
|
||||||
targetCompatibility JavaVersion.VERSION_17
|
|
||||||
}
|
|
||||||
|
|
||||||
lint {
|
|
||||||
disable 'MissingTranslation'
|
|
||||||
}
|
|
||||||
|
|
||||||
packagingOptions {
|
|
||||||
jniLibs {
|
|
||||||
useLegacyPackaging = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ext.abiCodes = ['armeabi-v7a':1, x86:2, x86_64:3, 'arm64-v8a':4]
|
|
||||||
|
|
||||||
// For per-density APKs, create a similar map:
|
|
||||||
// ext.densityCodes = ['mdpi': 1, 'hdpi': 2, 'xhdpi': 3]
|
|
||||||
|
|
||||||
// For each APK output variant, override versionCode with a combination of
|
|
||||||
// ext.abiCodes * 1000 + variant.versionCode. In this example, variant.versionCode
|
|
||||||
// is equal to defaultConfig.versionCode. If you configure product flavors that
|
|
||||||
// define their own versionCode, variant.versionCode uses that value instead.
|
|
||||||
android.applicationVariants.all { variant ->
|
|
||||||
|
|
||||||
// Assigns a different version code for each output APK
|
|
||||||
// other than the universal APK.
|
|
||||||
variant.outputs.each { output ->
|
|
||||||
|
|
||||||
// Stores the value of ext.abiCodes that is associated with the ABI for this variant.
|
|
||||||
def baseAbiVersionCode =
|
|
||||||
// Determines the ABI for this variant and returns the mapped value.
|
|
||||||
project.ext.abiCodes.get(output.getFilter(OutputFile.ABI))
|
|
||||||
|
|
||||||
// Because abiCodes.get() returns null for ABIs that are not mapped by ext.abiCodes,
|
|
||||||
// the following code doesn't override the version code for universal APKs.
|
|
||||||
// However, because you want universal APKs to have the lowest version code,
|
|
||||||
// this outcome is desirable.
|
|
||||||
if (baseAbiVersionCode != null) {
|
|
||||||
|
|
||||||
// Assigns the new version code to versionCodeOverride, which changes the
|
|
||||||
// version code for only the output APK, not for the variant itself. Skipping
|
|
||||||
// this step causes Gradle to use the value of variant.versionCode for the APK.
|
|
||||||
output.versionCodeOverride =
|
|
||||||
baseAbiVersionCode * 1000 + variant.versionCode
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
aboutLibraries {
|
|
||||||
additionalLicenses = ["LGPL_3_0_only", "Apache_2_0"]
|
|
||||||
}
|
|
||||||
|
|
||||||
configurations {
|
|
||||||
// Access all imported libraries
|
|
||||||
compileOnly.extendsFrom(runtimeOnly)
|
|
||||||
}
|
|
||||||
|
|
||||||
// "true" is not allowed inside this block, use "hasSentryConfig" instead.
|
|
||||||
// This is because gradle doesn't allow to enable/disable plugins conditionally
|
|
||||||
sentry {
|
|
||||||
ignoredFlavors = []
|
|
||||||
|
|
||||||
// All the symbol upload logic has to be disabled for f-droid flavor, as we don't have a way to provide an auth token to f-droid
|
|
||||||
|
|
||||||
// Disables or enables the handling of Proguard mapping for Sentry.
|
|
||||||
// If enabled the plugin will generate a UUID and will take care of
|
|
||||||
// uploading the mapping to Sentry. If disabled, all the logic
|
|
||||||
// related to proguard mapping will be excluded.
|
|
||||||
// Default is enabled.
|
|
||||||
includeProguardMapping = hasSentryConfig
|
|
||||||
|
|
||||||
// Whether the plugin should attempt to auto-upload the mapping file to Sentry or not.
|
|
||||||
// If disabled the plugin will run a dry-run and just generate a UUID.
|
|
||||||
// The mapping file has to be uploaded manually via sentry-cli in this case.
|
|
||||||
// Default is enabled.
|
|
||||||
autoUploadProguardMapping = hasSentryConfig
|
|
||||||
|
|
||||||
// Experimental flag to turn on support for GuardSquare's tools integration (Dexguard and External Proguard).
|
|
||||||
// If enabled, the plugin will try to consume and upload the mapping file produced by Dexguard and External Proguard.
|
|
||||||
// Default is disabled.
|
|
||||||
experimentalGuardsquareSupport = hasSentryConfig
|
|
||||||
|
|
||||||
// Disables or enables the automatic configuration of Native Symbols
|
|
||||||
// for Sentry. This executes sentry-cli automatically so
|
|
||||||
// you don't need to do it manually.
|
|
||||||
// Default is disabled.
|
|
||||||
uploadNativeSymbols = hasSentryConfig
|
|
||||||
|
|
||||||
// Does or doesn't include the source code of native code for Sentry.
|
|
||||||
// This executes sentry-cli with the --include-sources param. automatically so
|
|
||||||
// you don't need to do it manually.
|
|
||||||
// Default is disabled.
|
|
||||||
includeNativeSources = hasSentryConfig
|
|
||||||
|
|
||||||
// Enable or disable the tracing instrumentation.
|
|
||||||
// Does auto instrumentation for specified features through bytecode manipulation.
|
|
||||||
// Default is enabled.
|
|
||||||
tracingInstrumentation {
|
|
||||||
enabled = true
|
|
||||||
features = EnumSet.allOf(InstrumentationFeature)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enable auto-installation of Sentry components (sentry-android SDK and okhttp, timber and fragment integrations).
|
|
||||||
autoInstallation {
|
|
||||||
sentryVersion = sentry_version
|
|
||||||
}
|
|
||||||
|
|
||||||
// temp fix for gradle bug
|
|
||||||
includeDependenciesReport = true
|
|
||||||
}
|
|
||||||
|
|
||||||
configurations {
|
|
||||||
implementation.exclude group: 'org.jetbrains', module: 'annotations'
|
|
||||||
// exclude chromium cronet-api
|
|
||||||
implementation.exclude group: 'org.chromium.net', module: 'cronet-api'
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
// UI
|
|
||||||
implementation 'androidx.appcompat:appcompat:1.6.1'
|
|
||||||
implementation 'androidx.activity:activity-ktx:1.7.0'
|
|
||||||
implementation 'androidx.emoji2:emoji2:1.3.0'
|
|
||||||
implementation 'androidx.emoji2:emoji2-views-helper:1.3.0'
|
|
||||||
implementation 'androidx.preference:preference-ktx:1.2.0'
|
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.3.0'
|
|
||||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
|
||||||
implementation 'androidx.webkit:webkit:1.6.1'
|
|
||||||
implementation 'com.google.android.material:material:1.8.0'
|
|
||||||
implementation 'dev.rikka.rikkax.layoutinflater:layoutinflater:1.3.0'
|
|
||||||
implementation "dev.rikka.rikkax.insets:insets:1.3.0"
|
|
||||||
implementation 'com.github.KieronQuinn:MonetCompat:0.4.1'
|
|
||||||
implementation 'com.github.Fox2Code:FoxCompat:0.2.0'
|
|
||||||
implementation 'com.mikepenz:aboutlibraries:10.6.2'
|
|
||||||
|
|
||||||
// Utils
|
|
||||||
implementation 'androidx.work:work-runtime:2.8.1'
|
|
||||||
implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.10'
|
|
||||||
implementation 'com.squareup.okhttp3:okhttp-dnsoverhttps:5.0.0-alpha.10'
|
|
||||||
// logging interceptor
|
|
||||||
implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.10'
|
|
||||||
// Chromium cronet from androidacy
|
|
||||||
implementation 'com.androidacy:cronet-common:112.0.5615.62'
|
|
||||||
implementation 'com.androidacy:cronet-native:112.0.5615.62'
|
|
||||||
implementation 'com.androidacy:cronet-api:112.0.5615.62'
|
|
||||||
// protobuf - fixes a crash on some devices
|
|
||||||
implementation 'com.google.protobuf:protobuf-javalite:3.22.2'
|
|
||||||
|
|
||||||
implementation 'com.github.topjohnwu.libsu:io:5.0.5'
|
|
||||||
implementation 'com.github.Fox2Code:RosettaX:1.0.9'
|
|
||||||
implementation 'com.github.Fox2Code:AndroidANSI:1.0.1'
|
|
||||||
|
|
||||||
// sentry
|
|
||||||
implementation platform('io.sentry:sentry-bom:6.17.0')
|
|
||||||
implementation "io.sentry:sentry-android"
|
|
||||||
implementation "io.sentry:sentry-android-timber"
|
|
||||||
implementation "io.sentry:sentry-android-fragment"
|
|
||||||
implementation "io.sentry:sentry-android-okhttp"
|
|
||||||
implementation "io.sentry:sentry-kotlin-extensions"
|
|
||||||
implementation "io.sentry:sentry-android-ndk"
|
|
||||||
|
|
||||||
// Markdown
|
|
||||||
// TODO: switch to an updated implementation
|
|
||||||
implementation "io.noties.markwon:core:4.6.2"
|
|
||||||
implementation "io.noties.markwon:html:4.6.2"
|
|
||||||
implementation "io.noties.markwon:image:4.6.2"
|
|
||||||
implementation "io.noties.markwon:syntax-highlight:4.6.2"
|
|
||||||
implementation 'com.google.net.cronet:cronet-okhttp:0.1.0'
|
|
||||||
implementation "com.caverock:androidsvg:1.4"
|
|
||||||
|
|
||||||
implementation 'androidx.core:core-ktx:1.10.0'
|
|
||||||
|
|
||||||
// timber
|
|
||||||
implementation 'com.jakewharton.timber:timber:5.0.1'
|
|
||||||
|
|
||||||
// ksp
|
|
||||||
implementation 'com.google.devtools.ksp:symbol-processing-api:1.8.20-1.0.10'
|
|
||||||
|
|
||||||
implementation "androidx.security:security-crypto:1.1.0-alpha05"
|
|
||||||
|
|
||||||
// some utils
|
|
||||||
implementation 'commons-io:commons-io:20030203.000550'
|
|
||||||
implementation 'org.apache.commons:commons-compress:1.23.0'
|
|
||||||
|
|
||||||
// analytics
|
|
||||||
implementation 'com.github.matomo-org:matomo-sdk-android:4.1.4'
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasSentryConfig) {
|
|
||||||
Properties properties = new Properties()
|
|
||||||
try (FileInputStream fis = new FileInputStream(sentryConfigFile)) {
|
|
||||||
properties.load(fis)
|
|
||||||
}
|
|
||||||
tasks.withType(Exec).configureEach {
|
|
||||||
environment "SENTRY_PROJECT", properties.getProperty("defaults.project")
|
|
||||||
environment "SENTRY_ORG", properties.getProperty("defaults.org")
|
|
||||||
environment "SENTRY_URL", properties.getProperty("defaults.url")
|
|
||||||
environment "SENTRY_AUTH_TOKEN", properties.getProperty("auth.token")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
android {
|
|
||||||
ndkVersion '25.2.9519653'
|
|
||||||
dependenciesInfo {
|
|
||||||
includeInApk false
|
|
||||||
includeInBundle false
|
|
||||||
}
|
|
||||||
buildFeatures {
|
|
||||||
viewBinding true
|
|
||||||
buildConfig true
|
|
||||||
}
|
|
||||||
|
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = JavaVersion.VERSION_17
|
|
||||||
}
|
|
||||||
//noinspection GrDeprecatedAPIUsage
|
|
||||||
buildToolsVersion '34.0.0 rc3'
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
kotlin {
|
|
||||||
jvmToolchain {
|
|
||||||
languageVersion.set(JavaLanguageVersion.of(17))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Safeguard (Do not remove. Or do, i'm just a comment not a cop)
|
|
||||||
final File res = new File(projectDir, "src/main/res")
|
|
||||||
for (String name : res.list()) {
|
|
||||||
// Character.isDigit is required to make sure
|
|
||||||
// we don't confuse "values-vi" as "values-v69"
|
|
||||||
if (name.startsWith("values-v") && Character.isDigit(name.charAt(8))) {
|
|
||||||
final String ext = name + "/strings.xml"
|
|
||||||
if (new File(res, ext).exists()) {
|
|
||||||
final String errMessage =
|
|
||||||
"String should not be defined in " + ext + " use values/strings.xml instead"
|
|
||||||
println(errMessage)
|
|
||||||
throw new GradleException(errMessage)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,402 @@
|
|||||||
|
@file:Suppress("UnstableApiUsage", "SpellCheckingInspection")
|
||||||
|
|
||||||
|
import com.android.build.api.dsl.Packaging
|
||||||
|
import io.sentry.android.gradle.extensions.InstrumentationFeature
|
||||||
|
import io.sentry.android.gradle.instrumentation.logcat.LogcatLevel
|
||||||
|
import com.android.build.api.variant.FilterConfiguration.FilterType.*
|
||||||
|
import java.io.ByteArrayOutputStream
|
||||||
|
import java.util.Properties
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
// Gradle doesn't allow conditionally enabling/disabling plugins
|
||||||
|
id("io.sentry.android.gradle")
|
||||||
|
id("com.android.application")
|
||||||
|
id("com.mikepenz.aboutlibraries.plugin")
|
||||||
|
kotlin("android")
|
||||||
|
kotlin("kapt")
|
||||||
|
}
|
||||||
|
|
||||||
|
// apply realm-android
|
||||||
|
apply(plugin = "realm-android")
|
||||||
|
val hasSentryConfig = File(rootProject.projectDir, "sentry.properties").exists()
|
||||||
|
android {
|
||||||
|
// functions to get git info: gitCommitHash, gitBranch, gitRemote
|
||||||
|
val gitCommitHash by lazy {
|
||||||
|
val stdout = ByteArrayOutputStream()
|
||||||
|
rootProject.exec {
|
||||||
|
commandLine("git", "rev-parse", "--short", "HEAD")
|
||||||
|
standardOutput = stdout
|
||||||
|
}
|
||||||
|
stdout.toString().trim()
|
||||||
|
}
|
||||||
|
val gitBranch by lazy {
|
||||||
|
val stdout = ByteArrayOutputStream()
|
||||||
|
rootProject.exec {
|
||||||
|
commandLine("git", "rev-parse", "--abbrev-ref", "HEAD")
|
||||||
|
standardOutput = stdout
|
||||||
|
}
|
||||||
|
stdout.toString().trim()
|
||||||
|
}
|
||||||
|
val gitRemote by lazy {
|
||||||
|
val stdout = ByteArrayOutputStream()
|
||||||
|
rootProject.exec {
|
||||||
|
commandLine("git", "config", "--get", "remote.origin.url")
|
||||||
|
standardOutput = stdout
|
||||||
|
}
|
||||||
|
stdout.toString().trim()
|
||||||
|
}
|
||||||
|
namespace = "com.fox2code.mmm"
|
||||||
|
compileSdk = 33
|
||||||
|
ndkVersion = "25.2.9519653"
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
applicationId = "com.fox2code.mmm"
|
||||||
|
minSdk = 24
|
||||||
|
targetSdk = 33
|
||||||
|
versionCode = 65
|
||||||
|
versionName = "2.0.0"
|
||||||
|
vectorDrawables {
|
||||||
|
useSupportLibrary = true
|
||||||
|
}
|
||||||
|
multiDexEnabled = true
|
||||||
|
}
|
||||||
|
|
||||||
|
splits {
|
||||||
|
|
||||||
|
// Configures multiple APKs based on ABI.
|
||||||
|
abi {
|
||||||
|
|
||||||
|
// Enables building multiple APKs per ABI.
|
||||||
|
isEnable = true
|
||||||
|
|
||||||
|
// By default all ABIs are included, so use reset() and include to specify that you only
|
||||||
|
// want APKs for x86 and x86_64.
|
||||||
|
|
||||||
|
// Resets the list of ABIs for Gradle to create APKs for to none.
|
||||||
|
reset()
|
||||||
|
|
||||||
|
// Specifies a list of ABIs for Gradle to create APKs for.
|
||||||
|
include("x86", "x86_64", "arm64-v8a", "armeabi-v7a")
|
||||||
|
|
||||||
|
// Specifies that you don't want to also generate a universal APK that includes all ABIs.
|
||||||
|
isUniversalApk = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
getByName("release") {
|
||||||
|
isMinifyEnabled = true
|
||||||
|
isShrinkResources = true
|
||||||
|
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
|
||||||
|
}
|
||||||
|
getByName("debug") {
|
||||||
|
applicationIdSuffix = ".debug"
|
||||||
|
isDebuggable = true
|
||||||
|
|
||||||
|
// ONLY FOR TESTING SENTRY
|
||||||
|
// minifyEnabled true
|
||||||
|
// shrinkResources true
|
||||||
|
// proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
flavorDimensions.add("type")
|
||||||
|
productFlavors {
|
||||||
|
create("default") {
|
||||||
|
// debug http requests. do not set this to true if you care about performance!!!!!
|
||||||
|
buildConfigField("boolean", "DEBUG_HTTP", "false")
|
||||||
|
// Latest commit hash as BuildConfig.COMMIT_HASH
|
||||||
|
buildConfigField("String", "COMMIT_HASH", "\"" + gitCommitHash + "\"")
|
||||||
|
// Get the current branch name as BuildConfig.BRANCH_NAME
|
||||||
|
buildConfigField("String", "BRANCH_NAME", "\"" + gitBranch + "\"")
|
||||||
|
// Get remote url as BuildConfig.REMOTE_URL
|
||||||
|
buildConfigField("String", "REMOTE_URL", "\"" + gitRemote + "\"")
|
||||||
|
dimension = "type"
|
||||||
|
buildConfigField("boolean", "ENABLE_AUTO_UPDATER", "true")
|
||||||
|
buildConfigField("boolean", "DEFAULT_ENABLE_CRASH_REPORTING", "true")
|
||||||
|
buildConfigField("boolean", "DEFAULT_ENABLE_CRASH_REPORTING_PII", "true")
|
||||||
|
buildConfigField("boolean", "DEFAULT_ENABLE_ANALYTICS", "true")
|
||||||
|
val properties = Properties()
|
||||||
|
if (project.rootProject.file("local.properties").exists()) {
|
||||||
|
// grab matomo.url
|
||||||
|
buildConfigField("String", "ANALYTICS_ENDPOINT", "\"" + properties.getProperty("matomo.url", "https://s-api.androidacy.com/matomo.php" + "\""))
|
||||||
|
} else {
|
||||||
|
buildConfigField("String", "ANALYTICS_ENDPOINT", "\"https://s-api.androidacy.com/matomo.php\"")
|
||||||
|
}
|
||||||
|
buildConfigField("boolean", "ENABLE_PROTECTION", "true")
|
||||||
|
// Get the androidacy client ID from the androidacy.properties
|
||||||
|
|
||||||
|
val propertiesA = Properties()
|
||||||
|
// If androidacy.properties doesn"t exist, use the default client ID which is heavily
|
||||||
|
// rate limited to 30 requests per minute
|
||||||
|
if (project.rootProject.file("androidacy.properties").exists()) {
|
||||||
|
propertiesA.load(project.rootProject.file("androidacy.properties").inputStream())
|
||||||
|
properties.setProperty("client_id", "\"" + propertiesA.getProperty("client_id") + "\"")
|
||||||
|
} else {
|
||||||
|
properties.setProperty("client_id", "5KYccdYxWB2RxMq5FTbkWisXi2dS6yFN9R7RVlFCG98FRdz6Mf5ojY2fyJCUlXJZ")
|
||||||
|
}
|
||||||
|
buildConfigField("String", "ANDROIDACY_CLIENT_ID", "\"" + propertiesA.getProperty("client_id") + "\"")
|
||||||
|
// If client ID is empty, disable androidacy
|
||||||
|
if (propertiesA.getProperty("client_id").isEmpty()) {
|
||||||
|
buildConfigField("java.util.List<String>",
|
||||||
|
"ENABLED_REPOS", "java.util.Arrays.asList(\"magisk_alt_repo\")")
|
||||||
|
} else {
|
||||||
|
buildConfigField("java.util.List<String>",
|
||||||
|
"ENABLED_REPOS",
|
||||||
|
"java.util.Arrays.asList(\"androidacy_repo\")",)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
create("fdroid") {
|
||||||
|
dimension = "type"
|
||||||
|
applicationIdSuffix = ".fdroid"
|
||||||
|
// debug http requests. do not set this to true if you care about performance!!!!!
|
||||||
|
buildConfigField("boolean", "DEBUG_HTTP", "false")
|
||||||
|
|
||||||
|
// Latest commit hash as BuildConfig.COMMIT_HASH
|
||||||
|
buildConfigField("String", "COMMIT_HASH", "\"" + gitCommitHash + "\"")
|
||||||
|
// Get the current branch name as BuildConfig.BRANCH_NAME
|
||||||
|
buildConfigField("String", "BRANCH_NAME", "\"" + gitBranch + "\"")
|
||||||
|
// Get remote url as BuildConfig.REMOTE_URL
|
||||||
|
buildConfigField("String", "REMOTE_URL", "\"" + gitRemote + "\"")
|
||||||
|
|
||||||
|
// Need to disable auto-updater for F-Droid flavor because their inclusion policy
|
||||||
|
// forbids downloading blobs from third-party websites (and F-Droid APK isn"t signed
|
||||||
|
// with our keys, so the APK wouldn"t install anyways).
|
||||||
|
buildConfigField("boolean", "ENABLE_AUTO_UPDATER", "false")
|
||||||
|
|
||||||
|
// Disable crash reporting for F-Droid flavor by default
|
||||||
|
buildConfigField("boolean", "DEFAULT_ENABLE_CRASH_REPORTING", "false")
|
||||||
|
buildConfigField("boolean", "DEFAULT_ENABLE_CRASH_REPORTING_PII", "false")
|
||||||
|
buildConfigField("boolean", "DEFAULT_ENABLE_ANALYTICS", "false")
|
||||||
|
val properties = Properties()
|
||||||
|
if (project.rootProject.file("local.properties").exists()) {
|
||||||
|
// grab matomo.url
|
||||||
|
buildConfigField("String", "ANALYTICS_ENDPOINT", properties.getProperty("matomo.url", "https://s-api.androidacy.com/matomo.php"))
|
||||||
|
} else {
|
||||||
|
buildConfigField("String", "ANALYTICS_ENDPOINT", "https://s-api.androidacy.com/matomo.php")
|
||||||
|
}
|
||||||
|
buildConfigField("boolean", "ENABLE_PROTECTION", "true")
|
||||||
|
|
||||||
|
// Repo with ads or tracking feature are disabled by default for the
|
||||||
|
// F-Droid flavor. at the same time, the alt repo isn"t particularly trustworthy
|
||||||
|
buildConfigField("java.util.List<String>",
|
||||||
|
"ENABLED_REPOS",
|
||||||
|
"java.util.Arrays.asList(\"\")",)
|
||||||
|
|
||||||
|
// Get the androidacy client ID from the androidacy.properties
|
||||||
|
val propertiesA = Properties()
|
||||||
|
// If androidacy.properties doesn"t exist, use the fdroid client ID which is limited
|
||||||
|
// to 50 requests per minute
|
||||||
|
if (project.rootProject.file("androidacy.properties").exists()) {
|
||||||
|
propertiesA.load(project.rootProject.file("androidacy.properties").inputStream())
|
||||||
|
buildConfigField("String", "ANDROIDACY_CLIENT_ID", propertiesA.getProperty("client_id"))
|
||||||
|
} else {
|
||||||
|
properties.setProperty("client_id", "dQ1p7X8bF14PVJ7wAU6ORVjPB2IeTinsuAZ8Uos6tQiyUdUyIjSyZSmN54QBbaTy")
|
||||||
|
}
|
||||||
|
versionNameSuffix = "-froid"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
|
}
|
||||||
|
|
||||||
|
lint {
|
||||||
|
disable.add("MissingTranslation")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("UNUSED_EXPRESSION")
|
||||||
|
fun Packaging.() {
|
||||||
|
jniLibs {
|
||||||
|
useLegacyPackaging = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sentry {
|
||||||
|
|
||||||
|
includeProguardMapping.set(true)
|
||||||
|
|
||||||
|
autoUploadProguardMapping.set(hasSentryConfig)
|
||||||
|
|
||||||
|
experimentalGuardsquareSupport.set(true)
|
||||||
|
|
||||||
|
uploadNativeSymbols.set(hasSentryConfig)
|
||||||
|
|
||||||
|
includeNativeSources.set(true)
|
||||||
|
|
||||||
|
tracingInstrumentation {
|
||||||
|
enabled.set(true)
|
||||||
|
|
||||||
|
features.set(setOf(InstrumentationFeature.DATABASE, InstrumentationFeature.FILE_IO, InstrumentationFeature.OKHTTP, InstrumentationFeature.COMPOSE))
|
||||||
|
|
||||||
|
logcat {
|
||||||
|
enabled.set(true)
|
||||||
|
|
||||||
|
minLevel.set(LogcatLevel.WARNING)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
autoInstallation {
|
||||||
|
enabled.set(true)
|
||||||
|
sentryVersion.set("6.17.0")
|
||||||
|
}
|
||||||
|
|
||||||
|
includeDependenciesReport.set(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
val abiCodes = mapOf("armeabi-v7a" to 1, "x86" to 2, "x86_64" to 3)
|
||||||
|
|
||||||
|
// For per-density APKs, create a similar map:
|
||||||
|
// val densityCodes = mapOf("mdpi" to 1, "hdpi" to 2, "xhdpi" to 3)
|
||||||
|
|
||||||
|
|
||||||
|
// For each APK output variant, override versionCode with a combination of
|
||||||
|
// abiCodes * 1000 + variant.versionCode. In this example, variant.versionCode
|
||||||
|
// is equal to defaultConfig.versionCode. If you configure product flavors that
|
||||||
|
// define their own versionCode, variant.versionCode uses that value instead.
|
||||||
|
androidComponents {
|
||||||
|
onVariants { variant ->
|
||||||
|
|
||||||
|
// Assigns a different version code for each output APK
|
||||||
|
// other than the universal APK.
|
||||||
|
variant.outputs.forEach { output ->
|
||||||
|
val name = output.filters.find { it.filterType == ABI }?.identifier
|
||||||
|
|
||||||
|
// Stores the value of abiCodes that is associated with the ABI for this variant.
|
||||||
|
val baseAbiCode = abiCodes[name]
|
||||||
|
// Because abiCodes.get() returns null for ABIs that are not mapped by ext.abiCodes,
|
||||||
|
// the following code doesn't override the version code for universal APKs.
|
||||||
|
// However, because you want universal APKs to have the lowest version code,
|
||||||
|
// this outcome is desirable.
|
||||||
|
if (baseAbiCode != null) {
|
||||||
|
// Assigns the new version code to output.versionCode, which changes the version code
|
||||||
|
// for only the output APK, not for the variant itself.
|
||||||
|
@Suppress("USELESS_CAST")
|
||||||
|
val versioCode = output.versionCode.get() as Int
|
||||||
|
output.versionCode.set(baseAbiCode * 1000 + versioCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
aboutLibraries {
|
||||||
|
// Specify the additional licenses
|
||||||
|
additionalLicenses = arrayOf("LGPL_3_0_only", "Apache_2_0")
|
||||||
|
}
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
// Access all imported libraries
|
||||||
|
all {
|
||||||
|
// Exclude all libraries with the following group and module
|
||||||
|
exclude(group = "org.chromium.net", module = "cronet-api")
|
||||||
|
exclude(group = "org.jetbrains", module = "annotations-java5")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
// UI
|
||||||
|
implementation("androidx.appcompat:appcompat:1.6.1")
|
||||||
|
implementation("androidx.activity:activity-ktx:1.7.1")
|
||||||
|
implementation("androidx.emoji2:emoji2:1.3.0")
|
||||||
|
implementation("androidx.emoji2:emoji2-views-helper:1.3.0")
|
||||||
|
implementation("androidx.preference:preference-ktx:1.2.0")
|
||||||
|
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
|
||||||
|
implementation("androidx.recyclerview:recyclerview:1.3.0")
|
||||||
|
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
|
||||||
|
implementation("androidx.webkit:webkit:1.6.1")
|
||||||
|
implementation("com.google.android.material:material:1.8.0")
|
||||||
|
implementation("dev.rikka.rikkax.layoutinflater:layoutinflater:1.3.0")
|
||||||
|
implementation("dev.rikka.rikkax.insets:insets:1.3.0")
|
||||||
|
implementation("com.github.KieronQuinn:MonetCompat:0.4.1")
|
||||||
|
implementation("com.github.Fox2Code:FoxCompat:0.2.0")
|
||||||
|
implementation("com.mikepenz:aboutlibraries:10.6.2")
|
||||||
|
|
||||||
|
// Utils
|
||||||
|
implementation("androidx.work:work-runtime:2.8.1")
|
||||||
|
implementation("com.squareup.okhttp3:okhttp:5.0.0-alpha.10")
|
||||||
|
implementation("com.squareup.okhttp3:okhttp-dnsoverhttps:5.0.0-alpha.10")
|
||||||
|
// logging interceptor
|
||||||
|
implementation("com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.10")
|
||||||
|
// Chromium cronet from androidacy
|
||||||
|
implementation("com.androidacy:cronet-common:112.0.5615.62")
|
||||||
|
implementation("com.androidacy:cronet-native:112.0.5615.62")
|
||||||
|
implementation("com.androidacy:cronet-api:112.0.5615.62")
|
||||||
|
// protobuf - fixes a crash on some devices
|
||||||
|
implementation("com.google.protobuf:protobuf-javalite:3.22.2")
|
||||||
|
|
||||||
|
implementation("com.github.topjohnwu.libsu:io:5.0.5")
|
||||||
|
implementation("com.github.Fox2Code:RosettaX:1.0.9")
|
||||||
|
implementation("com.github.Fox2Code:AndroidANSI:1.0.1")
|
||||||
|
|
||||||
|
// sentry
|
||||||
|
implementation("io.sentry:sentry-android:6.17.0")
|
||||||
|
implementation("io.sentry:sentry-android-timber:6.17.0")
|
||||||
|
implementation("io.sentry:sentry-android-fragment:6.17.0")
|
||||||
|
implementation("io.sentry:sentry-android-okhttp:6.17.0")
|
||||||
|
implementation("io.sentry:sentry-kotlin-extensions:6.17.0")
|
||||||
|
implementation("io.sentry:sentry-android-ndk:6.17.0")
|
||||||
|
|
||||||
|
// Markdown
|
||||||
|
// TODO: switch to an updated implementation
|
||||||
|
implementation("io.noties.markwon:core:4.6.2")
|
||||||
|
implementation("io.noties.markwon:html:4.6.2")
|
||||||
|
implementation("io.noties.markwon:image:4.6.2")
|
||||||
|
implementation("io.noties.markwon:syntax-highlight:4.6.2")
|
||||||
|
implementation("com.google.net.cronet:cronet-okhttp:0.1.0")
|
||||||
|
implementation("com.caverock:androidsvg:1.4")
|
||||||
|
|
||||||
|
implementation("androidx.core:core-ktx:1.10.0")
|
||||||
|
|
||||||
|
// timber
|
||||||
|
implementation("com.jakewharton.timber:timber:5.0.1")
|
||||||
|
|
||||||
|
// ksp
|
||||||
|
implementation("com.google.devtools.ksp:symbol-processing-api:1.8.20-1.0.10")
|
||||||
|
|
||||||
|
implementation("androidx.security:security-crypto:1.1.0-alpha06")
|
||||||
|
|
||||||
|
// some utils
|
||||||
|
implementation("commons-io:commons-io:20030203.000550")
|
||||||
|
implementation("org.apache.commons:commons-compress:1.23.0")
|
||||||
|
|
||||||
|
// analytics
|
||||||
|
implementation("com.github.matomo-org:matomo-sdk-android:HEAD")
|
||||||
|
|
||||||
|
// annotations
|
||||||
|
implementation("org.jetbrains:annotations-java5:24.0.1")
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
ndkVersion = "25.2.9519653"
|
||||||
|
dependenciesInfo {
|
||||||
|
includeInApk = false
|
||||||
|
includeInBundle = false
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
viewBinding = true
|
||||||
|
buildConfig = true
|
||||||
|
}
|
||||||
|
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "1.8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//noinspection GrDeprecatedAPIUsage
|
||||||
|
buildToolsVersion = "34.0.0 rc3"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
jvmToolchain(17)
|
||||||
|
}
|
||||||
|
|
||||||
|
java {
|
||||||
|
toolchain {
|
||||||
|
languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
|
}
|
||||||
|
}
|
@ -1,36 +0,0 @@
|
|||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
|
||||||
buildscript {
|
|
||||||
repositories {
|
|
||||||
google()
|
|
||||||
mavenCentral()
|
|
||||||
gradlePluginPortal()
|
|
||||||
maven {
|
|
||||||
url 'https://jitpack.io'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
project.ext.latestAboutLibsRelease = "10.6.1"
|
|
||||||
project.ext.sentryConfigFile = new File(rootDir, "sentry.properties").getAbsoluteFile()
|
|
||||||
project.ext.hasSentryConfig = sentryConfigFile.exists()
|
|
||||||
project.ext.sentryCli = [
|
|
||||||
logLevel: "debug",
|
|
||||||
flavorAware: true
|
|
||||||
]
|
|
||||||
project.ext.kotlin_version = "1.8.0"
|
|
||||||
project.ext.sentry_version = "6.16.0"
|
|
||||||
dependencies {
|
|
||||||
//noinspection AndroidGradlePluginVersion
|
|
||||||
classpath 'com.android.tools.build:gradle:8.0.0'
|
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.20"
|
|
||||||
classpath "com.mikepenz.aboutlibraries.plugin:aboutlibraries-plugin:${latestAboutLibsRelease}"
|
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
|
||||||
// in the individual module build.gradle files
|
|
||||||
//noinspection GradleDependency
|
|
||||||
classpath "io.realm:realm-gradle-plugin:10.13.3-transformer-api"
|
|
||||||
classpath 'io.sentry:sentry-android-gradle-plugin:3.4.2'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register('clean') {
|
|
||||||
delete rootProject.buildDir
|
|
||||||
}
|
|
@ -0,0 +1,37 @@
|
|||||||
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
google()
|
||||||
|
mavenCentral()
|
||||||
|
gradlePluginPortal()
|
||||||
|
maven {
|
||||||
|
setUrl("https://jitpack.io")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
extra.apply {
|
||||||
|
set("sentryConfigFile", rootProject.file("sentry.properties"))
|
||||||
|
set("hasSentryConfig", false)
|
||||||
|
set("sentryVersion", "6.17.0")
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
classpath("com.android.tools.build:gradle:8.1.0-beta01")
|
||||||
|
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.20")
|
||||||
|
classpath("com.mikepenz.aboutlibraries.plugin:aboutlibraries-plugin:10.6.1")
|
||||||
|
|
||||||
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
|
// in the individual module build.gradle files
|
||||||
|
//noinspection GradleDependency
|
||||||
|
classpath("io.realm:realm-gradle-plugin:10.14.0-transformer-api")
|
||||||
|
classpath("io.sentry:sentry-android-gradle-plugin:3.5.0")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register("clean", Delete::class) {
|
||||||
|
delete(rootProject.buildDir)
|
||||||
|
}
|
||||||
|
afterEvaluate {
|
||||||
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_17.toString()
|
||||||
|
targetCompatibility = JavaVersion.VERSION_17.toString()
|
||||||
|
}
|
||||||
|
}
|
@ -1,12 +1,13 @@
|
|||||||
|
@file:Suppress("UnstableApiUsage")
|
||||||
|
|
||||||
dependencyResolutionManagement {
|
dependencyResolutionManagement {
|
||||||
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
maven {
|
// enable jitpack
|
||||||
url 'https://jitpack.io'
|
maven { setUrl("https://jitpack.io") }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rootProject.name = "MagiskModuleManager"
|
rootProject.name = "MagiskModuleManager"
|
||||||
include ':app'
|
include(":app")
|
Loading…
Reference in New Issue