Skip to content

Instantly share code, notes, and snippets.

@VeiZhang
Last active May 17, 2023 06:40
Show Gist options
  • Save VeiZhang/0af7b332e757362784467648fed7d7ef to your computer and use it in GitHub Desktop.
Save VeiZhang/0af7b332e757362784467648fed7d7ef to your computer and use it in GitHub Desktop.
AndroidStudio常用配置脚本
import java.text.SimpleDateFormat
import java.util.regex.Matcher
import java.util.regex.Pattern
ext {
// 上传bintray的配置
bintray = [
groupId : "com.excellence",
publishVersion: "1.0.0",
website : "https://github.com/VeiZhang",
licences : ['Apache-2.0']
]
// Kotlin版本
kotlin_version = "1.3.72"
// 插件
plugins = [
application : "com.android.application",
library : "com.android.library",
kotlin : "kotlin-android",
"kotlin-extensions" : "kotlin-android-extensions",
"kotlin-kapt" : "kotlin-kapt",
maven : "com.github.dcendents.android-maven",
bintray : "com.jfrog.bintray",
novoda : "com.novoda.bintray-release",
greendao : "org.greenrobot.greendao",
"greendao-gradle" : "org.greenrobot:greendao-gradle-plugin:3.2.2",
"safeargs" : "androidx.navigation.safeargs"
]
// 配置
android = [
/*************************原生配置*************************/
// Android Studio 高版本才支持30+,否则报错AssertionError: annotationType()
compileSdkVersion : 30,
buildToolsVersion : "28.0.0",
minSdkVersion : 15,
targetSdkVersion : 19,
versionCode : getVersionCode(),
versionName : getVersionName(),
/*************************自定义配置*************************/
androidSupportSdkVersion: "28.0.0",
navigationVersion : "2.1.0",
lifecycle : "2.2.0",
room : "2.3.0",
ktCoroutines : "1.3.2",
retrofit2 : "2.6.2",
leakcanary : "2.5",
exoplayer : "2.17.1",
ffmpeg : "1.2.6",
"imageloader" : "1.0.0",
"glide" : "4.11.0"
]
// 依赖
dependencies = [
// 旧版jre,新版使用jdk
"kotlin-stdlib" : "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version",
// Core KTX 模块为属于 Android 框架的通用库提供扩展程序
"core-ktx" : "androidx.core:core-ktx:1.1.0",
// 协程依赖:coroutines-core协程核心,coroutines-android协程Android
"kt-coroutines-android" : "org.jetbrains.kotlinx:kotlinx-coroutines-android:${android["ktCoroutines"]}",
"kt-coroutines-core" : "org.jetbrains.kotlinx:kotlinx-coroutines-core:${android["ktCoroutines"]}",
// kotlin反射
"kt-reflect" : "org.jetbrains.kotlin:kotlin-reflect:${android["ktCoroutines"]}",
"kt-lifecycle-viewmodel" : "androidx.lifecycle:lifecycle-viewmodel-ktx:${android["lifecycle"]}",
"kt-lifecycle-livedata" : "androidx.lifecycle:lifecycle-livedata-ktx:${android["lifecycle"]}",
/*************************原生依赖*************************/
"appcompat-v7" : "com.android.support:appcompat-v7:${android["androidSupportSdkVersion"]}",
"support-v4" : "com.android.support:support-v4:${android["androidSupportSdkVersion"]}",
"cardview-v7" : "com.android.support:cardview-v7:${android["androidSupportSdkVersion"]}",
"recyclerview-v7" : "com.android.support:recyclerview-v7:${android["androidSupportSdkVersion"]}",
"design" : "com.android.support:design:${android["androidSupportSdkVersion"]}",
"annotations" : "com.android.support:support-annotations:${android["androidSupportSdkVersion"]}",
"gridlayout-v7" : "com.android.support:gridlayout-v7:${android["androidSupportSdkVersion"]}",
"tv-provider" : "com.android.support:support-tv-provider:${android["androidSupportSdkVersion"]}",
"constraint-layout" : "com.android.support.constraint:constraint-layout:1.1.2",
"leanback" : "androidx.leanback:leanback:1.0.0",
"fragment" : "androidx.fragment:fragment:1.1.0",
"palette" : "androidx.palette:palette:1.0.0",
/*************************Jetpack*************************/
// AndroidX: https://developer.android.google.cn/jetpack/androidx/versions
"androidx-appcompat" : "androidx.appcompat:appcompat:1.1.0",
"androidx-support-v4" : "androidx.legacy:legacy-support-v4:1.0.0",
"androidx-cardview" : "androidx.cardview:cardview:1.0.0",
"androidx-recyclerview" : "androidx.recyclerview:recyclerview:1.0.0",
"androidx-annotations" : "androidx.annotation:annotation:1.1.0",
"androidx-gridlayout" : "androidx.gridlayout:gridlayout:1.0.0",
"androidx-constraintlayout" : "androidx.constraintlayout:constraintlayout:1.1.3",
"androidx-navigation-fragment" : "androidx.navigation:navigation-fragment:${android["navigationVersion"]}",
"androidx-navigation-ui" : "androidx.navigation:navigation-ui:${android["navigationVersion"]}",
"androidx-lifecycle-extensions" : "androidx.lifecycle:lifecycle-extensions:${android["lifecycle"]}",
"androidx-lifecycle-compiler" : "androidx.lifecycle:lifecycle-compiler:${android["lifecycle"]}",
"androidx-lifecycle-reactivestreams": "androidx.lifecycle:lifecycle-reactivestreams:${android["lifecycle"]}",
"androidx-room-runtime" : "androidx.room:room-runtime:${android["room"]}",
"androidx-room-rxjava2" : "androidx.room:room-rxjava2:${android["room"]}",
"androidx-room-compiler" : "androidx.room:room-compiler:${android["room"]}",
// https://github.com/material-components/material-components-android
"material" : "com.google.android.material:material:1.0.0",
/*************************第三方依赖*************************/
// https://github.com/square/retrofit
"retrofit2" : "com.squareup.retrofit2:retrofit:${android["retrofit2"]}",
"converter-scalars" : "com.squareup.retrofit2:converter-scalars:${android["retrofit2"]}",
"converter-gson" : "com.squareup.retrofit2:converter-gson:${android["retrofit2"]}",
"adapter-rxjava" : "com.squareup.retrofit2:adapter-rxjava:${android["retrofit2"]}",
"adapter-rxjava2" : "com.squareup.retrofit2:adapter-rxjava2:${android["retrofit2"]}",
// https://github.com/square/okhttp
"okhttp" : "com.squareup.okhttp3:okhttp:4.9.1",
"okhttp-logging" : "com.squareup.okhttp3:logging-interceptor:4.9.1",
// https://github.com/greenrobot/greenDAO
"greendao" : "org.greenrobot:greendao:3.2.2",
// https://github.com/yuweiguocn/GreenDaoUpgradeHelper
"greendao-helper" : "io.github.yuweiguocn:GreenDaoUpgradeHelper:2.2.1",
// https://github.com/bumptech/glide
"glide" : "com.github.bumptech.glide:glide:${android["glide"]}",
"glide-compiler" : "com.github.bumptech.glide:compiler:${android["glide"]}",
"glide-okhttp" : "com.github.bumptech.glide:okhttp3-integration:${android["glide"]}",
// https://github.com/square/picasso
"picasso" : "com.squareup.picasso:picasso:2.71828",
// https://github.com/facebook/fresco
"fresco" : "com.facebook.fresco:fresco:2.0.0",
// https://github.com/greenrobot/EventBus
"eventbus" : "org.greenrobot:eventbus:3.1.1",
// https://github.com/BuglyDevTeam/Bugly-Android
"bugly" : "com.tencent.bugly:crashreport:3.0.0",
"bugly-native" : "com.tencent.bugly:nativecrashreport:3.7.1",
"bulgy_tinker" : "com.tencent.tinker:tinker-android-lib:1.9.9",
"bugly_upgrade" : "com.tencent.bugly:crashreport_upgrade:1.3.7",
"multidex" : "com.android.support:multidex:1.0.1",
// https://bintray.com/android/android-utils/com.android.volley.volley
"volley" : "com.android.volley:volley:1.1.1",
// https://github.com/ReactiveX/RxJava
"rxjava" : "io.reactivex:rxjava:1.3.8",
"rxjava2" : "io.reactivex.rxjava2:rxjava:2.2.9",
"rxandroid" : "io.reactivex:rxandroid:2.1.1",
"rxandroid2" : 'io.reactivex.rxjava2:rxandroid:2.1.1',
// https://github.com/JakeWharton/RxBinding
"rxbinding" : 'com.jakewharton.rxbinding3:rxbinding-leanback:3.0.0',
// https://github.com/google/gson
"gson" : "com.google.code.gson:gson:2.8.5",
// https://github.com/alibaba/fastjson
"fastjson" : "com.alibaba:fastjson:1.1.70.android",
// https://github.com/apache/commons-lang
"commons-lang3" : "org.apache.commons:commons-lang3:3.9",
// https://github.com/apache/commons-net
"commons-net" : "commons-net:commons-net:3.8.0",
// https://github.com/square/leakcanary
"leakcanary" : "com.squareup.leakcanary:leakcanary-android:${android["leakcanary"]}",
// https://github.com/YoKeyword/Fragmentation
"fragmentation" : "me.yokeyword:fragmentation:1.3.7",
// https://github.com/DreaminginCodeZH/MaterialRatingBar
"materialratingbar" : "me.zhanghai.android.materialratingbar:library:1.3.2",
// https://github.com/airbnb/lottie-android,2.8.0+是为了兼容AndroidX,没有用到AndroidX,则使用版本2.7.0,否则莫名其妙会报错
"lottie" : "com.airbnb.android:lottie:2.7.0",
// https://github.com/google/ExoPlayer,2.8.4+是为了兼容AndroidX
"exoplayer" : "com.google.android.exoplayer:exoplayer:${android["exoplayer"]}",
"exoplayer-core" : "com.google.android.exoplayer:exoplayer-core:${android["exoplayer"]}",
"exoplayer-dash" : "com.google.android.exoplayer:exoplayer-dash:${android["exoplayer"]}",
"exoplayer-hls" : "com.google.android.exoplayer:exoplayer-hls:${android["exoplayer"]}",
"exoplayer-smoothstreaming" : "com.google.android.exoplayer:exoplayer-smoothstreaming:${android["exoplayer"]}",
"exoplayer-ui" : "com.google.android.exoplayer:exoplayer-ui:${android["exoplayer"]}",
"exoplayer-extension-ima" : "com.google.android.exoplayer:extension-ima:${android["exoplayer"]}",
"exoplayer-extension-rtmp" : "com.google.android.exoplayer:extension-rtmp:${android["exoplayer"]}",
"exoplayer-extension-gvr" : "com.google.android.exoplayer:extension-gvr:2.15.1",
"exoplayer-extension-mediasession" : "com.google.android.exoplayer:extension-mediasession:${android["exoplayer"]}",
"exoplayer-extension-okhttp" : "com.google.android.exoplayer:extension-okhttp:${android["exoplayer"]}",
"exoplayer-extension-cast" : "com.google.android.exoplayer:extension-cast:${android["exoplayer"]}",
"exoplayer-extension-cronet" : "com.google.android.exoplayer:extension-cronet:${android["exoplayer"]}",
"exoplayer-extension-leanback" : "com.google.android.exoplayer:extension-leanback:${android["exoplayer"]}",
"exoplayer-extension-jobdispatcher" : "com.google.android.exoplayer:extension-jobdispatcher:${android["exoplayer"]}",
"exoplayer-extension-workmanager" : "com.google.android.exoplayer:extension-workmanager:${android["exoplayer"]}",
// https://www.alibabacloud.com/help/zh/apsaravideo-for-vod/latest/release-notes-of-apsaravideo-player-sdk-for-android
"aliyun-player" : 'com.aliyun.sdk.android:AliyunPlayer:5.4.6.0-full',
"alivc-conan" : 'com.alivc.conan:AlivcConan:0.9.5',
// https://github.com/videolan/vlc-android
// https://search.maven.org/artifact/org.videolan.android/libvlc-all
"vlc-player" : "org.videolan.android:libvlc-all:3.5.0-eap8",
// https://github.com/zaclimon/Tsutaeru
"xipl" : "com.zaclimon:xipl:0.2.2",
"tiflibrary" : "com.zaclimon:tiflibrary:0.2.2",
// https://github.com/SufficientlySecure/html-textview
"html-text" : "org.sufficientlysecure:html-textview:4.0",
// https://developers.google.com/youtube/android/player
// https://github.com/bertrandmartel/youtubetv.git
// https://github.com/VeiZhang/youtubetv
"youtubetv" : "com.excellence:youtubetv:1.0.4",
"smarttube" : "com.excellence:smarttube:1.1.2",
// https://github.com/averyzhong/SubtitleForAndroid
// https://github.com/VeiZhang/SubtitleForAndroid
"external-subtitle" : "com.excellence:external-subtitle:1.0.4",
"upgrader" : "com.excellence:upgrader:1.2.9",
"upgrader-pure" : "com.excellence:upgrader-pure:1.2.9",
"upgrader-downloader" : "com.tosmart:downloader:1.1.1",
"autodispose" : "com.uber.autodispose:autodispose:0.6.1",
"autodispose-android-arch" : "com.uber.autodispose:autodispose-android-archcomponents:0.6.1",
"zxing-core" : "com.google.zxing:core:3.4.1",
"xml-apis" : "xml-apis:xml-apis:2.0.2",
"jsch" : "com.jcraft:jsch:0.1.55",
/*************************个人依赖*************************/
// https://github.com/VeiZhang/BaseToolsLibrary
"basetools" : "com.excellence:basetools:1.3.1-RC1",
// https://github.com/VeiZhang/Permission
"permission" : "com.excellence:permission:1.0.2",
// https://github.com/VeiZhang/RetrofitClient
"retrofit-client" : "com.excellence:retrofit:1.0.5",
"retrofit-client2" : "com.excellence.retrofit:retrofit2:2.0.0",
// https://github.com/VeiZhang/QSkinLoader
"skinloader" : "com.excellence:skinloader:1.2.2",
// https://github.com/VeiZhang/ToastKit
"toast" : "com.excellence:toast:1.1.0",
// https://github.com/VeiZhang/MailSender
"mailsender" : "com.excellence:mailsender:1.0.0",
// https://github.com/VeiZhang/Downloader
"downloader" : "com.excellence:downloader:1.2.0",
// https://github.com/VeiZhang/AppStatistics
"app-statistics" : "com.excellence:app-statistics:1.0.1",
// https://github.com/VeiZhang/AndroidExec
"exec" : "com.excellence:exec:1.1.2",
// https://github.com/VeiZhang/AndroidFFmpeg
"ffmpeg" : "com.excellence:ffmpeg:${android["ffmpeg"]}",
"ffmpeg-java" : "com.excellence:ffmpeg-java:${android["ffmpeg"]}",
"ffmpeg-armv7a" : "com.excellence:ffmpeg-armv7a:${android["ffmpeg"]}",
"ffmpeg-arm64-v8a" : "com.excellence:ffmpeg-arm64-v8a:${android["ffmpeg"]}",
"ffmpeg-x86" : "com.excellence:ffmpeg-x86:${android["ffmpeg"]}",
"ffmpeg-x86_64" : "com.excellence:ffmpeg-x86_64:${android["ffmpeg"]}",
"ffprobe-armv7a" : "com.excellence:ffprobe-armv7a:${android["ffmpeg"]}",
"ffprobe-arm64-v8a" : "com.excellence:ffprobe-arm64-v8a:${android["ffmpeg"]}",
"ffprobe-x86" : "com.excellence:ffprobe-x86:${android["ffmpeg"]}",
"ffprobe-x86_64" : "com.excellence:ffprobe-x86_64:${android["ffmpeg"]}",
// https://github.com/VeiZhang/ImageLoader
"imageloader" : "com.excellence:imageloader:${android["imageloader"]}",
"imageloader-fresco" : "com.excellence:imageloader-fresco:${android["imageloader"]}",
"imageloader-picasso" : "com.excellence:imageloader-picasso:${android["imageloader"]}",
"imageloader-glide" : "com.excellence:imageloader-glide:${android["imageloader"]}",
// http://192.168.1.239/common_library/timeshift
"timeshift" : "com.excellence:timeshift:2.0.6",
// https://github.com/orhanobut/logger
"logger" : "com.orhanobut:logger:2.2.0",
"work" : "androidx.work:work-runtime:2.3.3",
"work-rxjava2" : "androidx.work:work-rxjava2:2.3.3",
"guava" : "com.google.guava:guava:28.1-android",
// https://github.com/Dimezis/BlurView
"blurview" : "com.eightbitlab:blurview:1.6.3",
// https://github.com/SufficientlySecure/html-textview
"html-textview" : "org.sufficientlysecure:html-textview:3.9",
// https://github.com/VeiZhang/DIY-EpgView (Discard)
"diy-epgview" : "com.excellence:diy-epgview:1.0.2",
// http://192.168.1.232:10001/widget/LeanbackEpgView (Discard)
"leanbackepgview" : "com.excellence:leanback-epgview:1.0",
// http://192.168.1.232:10001/widget/epgview
"epgview" : "com.excellence:epgview:2.8",
// https://github.com/VeiZhang/OpenSubtitle
"open-subtitles" : "com.excellence:open-subtitles:1.0.0",
// https://github.com/NanoHttpd/nanohttpd
"nanohttpd" : "org.nanohttpd:nanohttpd:2.3.1"
]
}
/***********************APP版本控制的通用方法***********************/
/**
* svn
* 直接读取svn版本号作为版本控制
*/
/**
* git
*
* git tag作为版本名称
* git 版本号有两种方法
* ①一种是把提交次数作为versionCode
* ②另外一种是把tag的数量作为versionCode
*/
/**
* 获取版本
* @return
*/
def getVersionName() {
def date = getDate()
def version = getSvnVersionCode()
if (version != 0) {
return "1.0.${version} [${date}]"
}
version = getGitTag()
if (version != 0) {
return "${version} [${date}]"
}
if (version == 0) {
version = 1
}
/**
* 错误的版本信息,请检查
*/
return "0.${version} [${date}]"
}
/**
* 获取版本号
* @return
*/
def getVersionCode() {
def versionCode = getSvnVersionCode()
if (versionCode == 0) {
versionCode = getGitVersionCode()
}
if (versionCode == 0) {
versionCode = 1
}
return versionCode
}
/***********************读取Git信息***********************/
/**
* 读取当前分支最近的一次git tag
* @return tag
*/
def getGitTag() {
try {
def process = ("git describe --abbrev=0 --tags").execute()
def tag = process.text.trim()
return tag
} catch (e) {
println e.getMessage()
}
return 0
}
/**
* HEAD所在的分支,以git提交的数量作为其版本号
* @return git提交的数量
*/
def getGitVersionCode() {
try {
def process = ("git rev-list --count HEAD").execute()
def version = process.text.trim().toInteger()
return version
} catch (e) {
println e.getMessage()
}
return 0
}
/***********************读取SVN信息***********************/
/**
* 根据svn提交版本生成版本号
* @return
*/
def getSvnVersionCode() {
try {
def process = ("svnversion -c " + getBuildDir().parent).execute()
process.waitFor()
def version = process.in.text
Pattern pattern = Pattern.compile("(\\d+:)?(\\d+)\\D")
Matcher matcher = pattern.matcher(version)
if (matcher.find()) {
version = matcher.group(matcher.groupCount())
}
return Integer.parseInt(version)
} catch (e) {
println e.getMessage()
}
return 0
}
/**
* 获取日期
* @return
*/
def getDate() {
String date = new SimpleDateFormat("MMddyyyy").format(new Date())
return date
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment