依存ライブラリのアップデート

This commit is contained in:
tateisu 2018-04-06 05:47:25 +09:00
parent ab4468d186
commit 2c0282a48d
7 changed files with 246 additions and 257 deletions

View File

@ -12,8 +12,8 @@ android {
minSdkVersion 21
targetSdkVersion 27
versionCode 233
versionName "2.3.3"
versionCode 234
versionName "2.3.4"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
@ -69,50 +69,22 @@ dependencies {
implementation project(':emoji')
implementation project(':apng_android')
implementation 'com.android.support:support-v4:27.1.0'
implementation 'com.android.support:appcompat-v7:27.1.0'
implementation 'com.android.support:design:27.1.0'
implementation 'com.android.support:customtabs:27.1.0'
implementation 'com.android.support:support-v13:27.1.0'
implementation "com.android.support:support-v4:$asl_version"
implementation "com.android.support:appcompat-v7:$asl_version"
implementation "com.android.support:design:$asl_version"
implementation "com.android.support:customtabs:$asl_version"
implementation "com.android.support:support-v13:$asl_version"
implementation 'com.google.firebase:firebase-core:12.0.0'
implementation 'com.google.firebase:firebase-messaging:12.0.0'
implementation "com.google.firebase:firebase-core:$firebase_version"
implementation "com.google.firebase:firebase-messaging:$firebase_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
testImplementation "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
testImplementation 'junit:junit:4.12' // junitと併用
// compile 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.21.2'
implementation 'uk.co.chrisjenx:calligraphy:2.3.0'
implementation 'com.github.woxthebox:draglistview:1.5.1'
implementation 'com.github.omadahealth:swipy:1.2.3@aar'
// compile 'com.jrummyapps:colorpicker:2.1.7'
implementation 'com.github.kenglxn.QRGen:android:2.3.0'
implementation 'com.squareup.okhttp3:okhttp:3.9.1'
testImplementation 'com.squareup.okhttp3:mockwebserver:3.9.1'
androidTestImplementation 'com.squareup.okhttp3:mockwebserver:3.9.1'
implementation 'commons-io:commons-io:2.6'
implementation 'com.github.bumptech.glide:glide:4.5.0'
implementation 'com.github.bumptech.glide:okhttp3-integration:4.5.0'
implementation 'com.github.bumptech.glide:annotations:4.5.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.5.0'
implementation 'org.hjson:hjson:3.0.0'
implementation 'com.google.android:flexbox:0.3.1'
implementation 'com.astuetz:pagerslidingtabstrip:1.0.1'
implementation 'com.google.android.exoplayer:exoplayer:r2.5.4'
implementation "org.jetbrains.anko:anko:$anko_version"
// Anko Layouts
implementation "org.jetbrains.anko:anko:$anko_version"
implementation "org.jetbrains.anko:anko-sdk25:$anko_version" // sdk15, sdk19, sdk21, sdk23 are also available
implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
@ -120,6 +92,34 @@ dependencies {
//implementation "org.jetbrains.anko:anko-sdk25-coroutines:$anko_version"
//implementation "org.jetbrains.anko:anko-appcompat-v7-coroutines:$anko_version"
testImplementation 'junit:junit:4.12' // kotlin-testとjunitを併用
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
testImplementation 'com.squareup.okhttp3:mockwebserver:3.10.0'
androidTestImplementation 'com.squareup.okhttp3:mockwebserver:3.10.0'
implementation 'com.github.bumptech.glide:glide:4.6.1'
implementation 'com.github.bumptech.glide:okhttp3-integration:4.6.1'
implementation 'com.github.bumptech.glide:annotations:4.6.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'
implementation 'uk.co.chrisjenx:calligraphy:2.3.0'
implementation 'com.github.woxthebox:draglistview:1.5.4'
implementation 'com.github.omadahealth:swipy:1.2.3@aar'
implementation 'com.github.kenglxn.QRGen:android:2.4.0'
implementation 'commons-io:commons-io:2.6'
implementation 'org.hjson:hjson:3.0.0'
implementation 'com.google.android:flexbox:0.3.2'
implementation 'com.astuetz:pagerslidingtabstrip:1.0.1'
implementation 'com.google.android.exoplayer:exoplayer:2.7.3'
// implementation 'com.simplecityapps:recyclerview-fastscroll:1.0.16'

View File

@ -13,10 +13,6 @@
<!-- CAMERAパーミッションをつけるとPlayストアにプライバシーポリシーを記載する必要がある -->
<!--<uses-permission android:name="android.permission.CAMERA"/>-->
<!-- https://mastodon.juggler.jp/@tateisu/99808478581120364 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />
<application
android:name=".App1"
android:allowBackup="true"

View File

@ -21,19 +21,16 @@ import android.support.v7.app.AppCompatActivity
import android.view.View
import android.view.Window
import android.widget.TextView
import com.google.android.exoplayer2.*
import com.google.android.exoplayer2.ExoPlaybackException
import com.google.android.exoplayer2.ExoPlayerFactory
import com.google.android.exoplayer2.PlaybackParameters
import com.google.android.exoplayer2.Player
import com.google.android.exoplayer2.SimpleExoPlayer
import com.google.android.exoplayer2.Timeline
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory
import com.google.android.exoplayer2.source.ExtractorMediaSource
import com.google.android.exoplayer2.source.MediaSourceEventListener
import com.google.android.exoplayer2.source.TrackGroupArray
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector
import com.google.android.exoplayer2.trackselection.TrackSelectionArray
import com.google.android.exoplayer2.ui.SimpleExoPlayerView
import com.google.android.exoplayer2.ui.PlayerView
import com.google.android.exoplayer2.upstream.DataSpec
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory
import com.google.android.exoplayer2.util.Util
@ -48,6 +45,7 @@ import jp.juggler.subwaytooter.api.entity.*
import jp.juggler.subwaytooter.dialog.ActionsDialog
import jp.juggler.subwaytooter.util.*
import jp.juggler.subwaytooter.view.PinchBitmapView
import java.io.IOException
class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
@ -85,7 +83,7 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
private lateinit var btnNext : View
private lateinit var tvError : TextView
private lateinit var exoPlayer : SimpleExoPlayer
private lateinit var exoView : SimpleExoPlayerView
private lateinit var exoView : PlayerView
private lateinit var svDescription : View
private lateinit var tvDescription : TextView
private lateinit var tvStatus : TextView
@ -93,8 +91,19 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
internal var buffering_last_shown : Long = 0
private val player_listener = object : Player.EventListener {
override fun onTimelineChanged(timeline : Timeline?, manifest : Any?) {
log.d("exoPlayer onTimelineChanged")
override fun onTimelineChanged(
timeline : Timeline?,
manifest : Any?,
reason : Int
) {
log.d("exoPlayer onTimelineChanged manifest=$manifest reason=$reason")
}
override fun onSeekProcessed(){
}
override fun onShuffleModeEnabledChanged(shuffleModeEnabled : Boolean) {
}
override fun onTracksChanged(
@ -134,8 +143,8 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
showToast(this@ActMediaViewer, error, "player error.")
}
override fun onPositionDiscontinuity() {
log.d("exoPlayer onPositionDiscontinuity")
override fun onPositionDiscontinuity(reason : Int) {
log.d("exoPlayer onPositionDiscontinuity reason=$reason")
}
override fun onPlaybackParametersChanged(playbackParameters : PlaybackParameters?) {
@ -298,13 +307,14 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
this, Util.getUserAgent(this, getString(R.string.app_name)), defaultBandwidthMeter
)
val mediaSource = ExtractorMediaSource(
Uri.parse(url),
dataSourceFactory,
extractorsFactory,
App1.getAppState(this).handler,
ExtractorMediaSource.EventListener { showError(it.withCaption("load error.") ) }
)
val mediaSource = ExtractorMediaSource.Factory(dataSourceFactory)
.setExtractorsFactory(extractorsFactory)
.createMediaSource(
Uri.parse(url),
App1.getAppState(this).handler,
mediaSourceEventListener
)
exoPlayer.prepare(mediaSource)
exoPlayer.playWhenReady = true
if(TootAttachmentLike.TYPE_GIFV == ta.type) {
@ -315,6 +325,93 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
}
}
val mediaSourceEventListener = object: MediaSourceEventListener{
override fun onLoadStarted(
dataSpec : DataSpec?,
dataType : Int,
trackType : Int,
trackFormat : Format?,
trackSelectionReason : Int,
trackSelectionData : Any?,
mediaStartTimeMs : Long,
mediaEndTimeMs : Long,
elapsedRealtimeMs : Long
) {
log.d("onLoadStarted")
}
override fun onDownstreamFormatChanged(
trackType : Int,
trackFormat : Format?,
trackSelectionReason : Int,
trackSelectionData : Any?,
mediaTimeMs : Long
) {
log.d("onDownstreamFormatChanged")
}
override fun onUpstreamDiscarded(
trackType : Int,
mediaStartTimeMs : Long,
mediaEndTimeMs : Long
) {
log.d("onUpstreamDiscarded")
}
override fun onLoadCompleted(
dataSpec : DataSpec?,
dataType : Int,
trackType : Int,
trackFormat : Format?,
trackSelectionReason : Int,
trackSelectionData : Any?,
mediaStartTimeMs : Long,
mediaEndTimeMs : Long,
elapsedRealtimeMs : Long,
loadDurationMs : Long,
bytesLoaded : Long
) {
log.d("onLoadCompleted")
}
override fun onLoadCanceled(
dataSpec : DataSpec?,
dataType : Int,
trackType : Int,
trackFormat : Format?,
trackSelectionReason : Int,
trackSelectionData : Any?,
mediaStartTimeMs : Long,
mediaEndTimeMs : Long,
elapsedRealtimeMs : Long,
loadDurationMs : Long,
bytesLoaded : Long
) {
log.d("onLoadCanceled")
}
override fun onLoadError(
dataSpec : DataSpec?,
dataType : Int,
trackType : Int,
trackFormat : Format?,
trackSelectionReason : Int,
trackSelectionData : Any?,
mediaStartTimeMs : Long,
mediaEndTimeMs : Long,
elapsedRealtimeMs : Long,
loadDurationMs : Long,
bytesLoaded : Long,
error : IOException?,
wasCanceled : Boolean
) {
if( error != null) {
showError(error.withCaption("load error."))
}
}
}
@SuppressLint("StaticFieldLeak")
private fun loadBitmap(ta : TootAttachment) {
val urlList = ta.getLargeUrlList(App1.pref)

View File

@ -15,10 +15,10 @@ import okio.Options
import okio.Sink
import okio.Source
import okio.Timeout
import java.nio.ByteBuffer
class ProgressResponseBody private constructor(private val originalBody : ResponseBody) : ResponseBody() {
class ProgressResponseBody private constructor(private val originalBody : ResponseBody) :
ResponseBody() {
companion object {
@ -29,9 +29,11 @@ class ProgressResponseBody private constructor(private val originalBody : Respon
// ex) builder.addInterceptor( ProgressResponseBody.makeInterceptor() );
fun makeInterceptor() : Interceptor {
return Interceptor { chain ->
val originalResponse = chain.proceed(chain.request()) ?: throw RuntimeException("makeInterceptor: chain.proceed() returns null.")
val originalResponse = chain.proceed(chain.request())
?: throw RuntimeException("makeInterceptor: chain.proceed() returns null.")
val originalBody = originalResponse.body() ?: throw RuntimeException("makeInterceptor: originalResponse.body() reruens null.")
val originalBody = originalResponse.body()
?: throw RuntimeException("makeInterceptor: originalResponse.body() reruens null.")
originalResponse.newBuilder()
.body(ProgressResponseBody(originalBody))
@ -47,7 +49,10 @@ class ProgressResponseBody private constructor(private val originalBody : Respon
@Suppress("MemberVisibilityCanPrivate")
@Throws(IOException::class)
private fun bytes(body : ResponseBody, callback : ProgressResponseBodyCallback) : ByteArray {
private fun bytes(
body : ResponseBody,
callback : ProgressResponseBodyCallback
) : ByteArray {
if(body is ProgressResponseBody) {
body.callback = callback
}
@ -55,7 +60,7 @@ class ProgressResponseBody private constructor(private val originalBody : Respon
}
}
private var callback : ProgressResponseBodyCallback = {_,_->}
private var callback : ProgressResponseBodyCallback = { _, _ -> }
/*
RequestBody.bytes() is defined as final, We can't override it.
@ -74,8 +79,6 @@ class ProgressResponseBody private constructor(private val originalBody : Respon
} );
*/
override fun contentType() : MediaType? {
return originalBody.contentType()
}
@ -95,6 +98,7 @@ class ProgressResponseBody private constructor(private val originalBody : Respon
// If there is the method, create the wrapper.
wrappedSource = object : ForwardingBufferedSource(originalSource) {
@Throws(IOException::class)
override fun readByteArray() : ByteArray {
/*
@ -108,21 +112,22 @@ class ProgressResponseBody private constructor(private val originalBody : Respon
try {
val contentLength = originalBody.contentLength()
val buffer = originalSource.buffer()
val source = field_source.get(originalSource) as Source? ?: throw IllegalArgumentException("source == null")
// same thing of Buffer.writeAll(), with counting.
val source = field_source.get(originalSource) as Source?
?: throw IllegalArgumentException("source == null")
// same thing of Buffer.writeAll(), with counting.
var nRead : Long = 0
callback (0, Math.max(contentLength, 1))
callback(0, Math.max(contentLength, 1))
while(true) {
val delta = source.read(buffer, 8192)
if(delta == - 1L) break
nRead += delta
if(nRead > 0 ) {
callback (nRead, Math.max(contentLength, nRead))
if(nRead > 0) {
callback(nRead, Math.max(contentLength, nRead))
}
}
// EOS時の進捗
callback (nRead, Math.max(contentLength, nRead))
callback(nRead, Math.max(contentLength, nRead))
return buffer.readByteArray()
@ -145,229 +150,118 @@ class ProgressResponseBody private constructor(private val originalBody : Respon
}
// To avoid double buffering, We have to make ForwardingBufferedSource.
internal open class ForwardingBufferedSource(private val originalSource : BufferedSource) : BufferedSource {
internal open class ForwardingBufferedSource(private val originalSource : BufferedSource) :
BufferedSource {
override fun buffer() : Buffer {
return originalSource.buffer()
}
override fun read(dst : ByteBuffer?) = originalSource.read(dst)
@Throws(IOException::class)
override fun exhausted() : Boolean {
return originalSource.exhausted()
}
override fun isOpen() = originalSource.isOpen
@Throws(IOException::class)
override fun require(byteCount : Long) {
originalSource.require(byteCount)
}
override fun buffer() : Buffer? = originalSource.buffer()
@Throws(IOException::class)
override fun request(byteCount : Long) : Boolean {
return originalSource.request(byteCount)
}
override fun exhausted() = originalSource.exhausted()
@Throws(IOException::class)
override fun readByte() : Byte {
return originalSource.readByte()
}
override fun require(byteCount : Long) = originalSource.require(byteCount)
@Throws(IOException::class)
override fun readShort() : Short {
return originalSource.readShort()
}
override fun request(byteCount : Long) = originalSource.request(byteCount)
@Throws(IOException::class)
override fun readShortLe() : Short {
return originalSource.readShortLe()
}
override fun readByte() = originalSource.readByte()
@Throws(IOException::class)
override fun readInt() : Int {
return originalSource.readInt()
}
override fun readShort() = originalSource.readShort()
@Throws(IOException::class)
override fun readIntLe() : Int {
return originalSource.readIntLe()
}
override fun readShortLe() = originalSource.readShortLe()
@Throws(IOException::class)
override fun readLong() : Long {
return originalSource.readLong()
}
override fun readInt() = originalSource.readInt()
@Throws(IOException::class)
override fun readLongLe() : Long {
return originalSource.readLongLe()
}
override fun readIntLe() = originalSource.readIntLe()
@Throws(IOException::class)
override fun readDecimalLong() : Long {
return originalSource.readDecimalLong()
}
override fun readLong() = originalSource.readLong()
@Throws(IOException::class)
override fun readHexadecimalUnsignedLong() : Long {
return originalSource.readHexadecimalUnsignedLong()
}
override fun readLongLe() = originalSource.readLongLe()
@Throws(IOException::class)
override fun skip(byteCount : Long) {
originalSource.skip(byteCount)
}
override fun readDecimalLong() = originalSource.readDecimalLong()
@Throws(IOException::class)
override fun readByteString() : ByteString {
return originalSource.readByteString()
}
override fun readHexadecimalUnsignedLong() = originalSource.readHexadecimalUnsignedLong()
@Throws(IOException::class)
override fun readByteString(byteCount : Long) : ByteString {
return originalSource.readByteString(byteCount)
}
override fun skip(byteCount : Long) = originalSource.skip(byteCount)
@Throws(IOException::class)
override fun select(options : Options) : Int {
return originalSource.select(options)
}
override fun readByteString() : ByteString? = originalSource.readByteString()
@Throws(IOException::class)
override fun readByteArray() : ByteArray {
return originalSource.readByteArray()
}
override fun readByteString(byteCount : Long) : ByteString? =
originalSource.readByteString(byteCount)
@Throws(IOException::class)
override fun readByteArray(byteCount : Long) : ByteArray {
return originalSource.readByteArray(byteCount)
}
override fun select(options : Options) = originalSource.select(options)
@Throws(IOException::class)
override fun read(sink : ByteArray) : Int {
return originalSource.read(sink)
}
override fun readByteArray() : ByteArray? = originalSource.readByteArray()
@Throws(IOException::class)
override fun readFully(sink : ByteArray) {
originalSource.readFully(sink)
}
override fun readByteArray(byteCount : Long) : ByteArray? =
originalSource.readByteArray(byteCount)
@Throws(IOException::class)
override fun read(sink : ByteArray, offset : Int, byteCount : Int) : Int {
return originalSource.read(sink, offset, byteCount)
}
override fun read(sink : ByteArray) = originalSource.read(sink)
@Throws(IOException::class)
override fun readFully(sink : Buffer, byteCount : Long) {
override fun readFully(sink : ByteArray) = originalSource.readFully(sink)
override fun read(sink : ByteArray, offset : Int, byteCount : Int) =
originalSource.read(sink, offset, byteCount)
override fun readFully(sink : Buffer, byteCount : Long) =
originalSource.readFully(sink, byteCount)
}
@Throws(IOException::class)
override fun readAll(sink : Sink) : Long {
return originalSource.readAll(sink)
}
override fun readAll(sink : Sink) = originalSource.readAll(sink)
@Throws(IOException::class)
override fun readUtf8() : String {
return originalSource.readUtf8()
}
override fun readUtf8() : String? = originalSource.readUtf8()
@Throws(IOException::class)
override fun readUtf8(byteCount : Long) : String {
return originalSource.readUtf8(byteCount)
}
override fun readUtf8(byteCount : Long) : String? = originalSource.readUtf8(byteCount)
@Throws(IOException::class)
override fun readUtf8Line() : String? {
return originalSource.readUtf8Line()
}
override fun readUtf8Line() : String? = originalSource.readUtf8Line()
@Throws(IOException::class)
override fun readUtf8LineStrict() : String {
return originalSource.readUtf8LineStrict()
}
override fun readUtf8LineStrict() : String? = originalSource.readUtf8LineStrict()
@Throws(IOException::class)
override fun readUtf8LineStrict(limit : Long) : String {
return originalSource.readUtf8LineStrict(limit)
}
override fun readUtf8LineStrict(limit : Long) : String? =
originalSource.readUtf8LineStrict(limit)
@Throws(IOException::class)
override fun readUtf8CodePoint() : Int {
return originalSource.readUtf8CodePoint()
}
override fun readUtf8CodePoint() = originalSource.readUtf8CodePoint()
@Throws(IOException::class)
override fun readString(charset : Charset) : String {
return originalSource.readString(charset)
}
override fun readString(charset : Charset) : String? = originalSource.readString(charset)
@Throws(IOException::class)
override fun readString(byteCount : Long, charset : Charset) : String {
return originalSource.readString(byteCount, charset)
}
override fun readString(byteCount : Long, charset : Charset) : String? =
originalSource.readString(byteCount, charset)
@Throws(IOException::class)
override fun indexOf(b : Byte) : Long {
return originalSource.indexOf(b)
}
override fun indexOf(b : Byte) = originalSource.indexOf(b)
@Throws(IOException::class)
override fun indexOf(b : Byte, fromIndex : Long) : Long {
return originalSource.indexOf(b, fromIndex)
}
override fun indexOf(b : Byte, fromIndex : Long) = originalSource.indexOf(b, fromIndex)
@Throws(IOException::class)
override fun indexOf(b : Byte, fromIndex : Long, toIndex : Long) : Long {
return originalSource.indexOf(b, fromIndex, toIndex)
}
override fun indexOf(b : Byte, fromIndex : Long, toIndex : Long) =
originalSource.indexOf(b, fromIndex, toIndex)
@Throws(IOException::class)
override fun indexOf(bytes : ByteString) : Long {
return originalSource.indexOf(bytes)
}
override fun indexOf(bytes : ByteString) = originalSource.indexOf(bytes)
@Throws(IOException::class)
override fun indexOf(bytes : ByteString, fromIndex : Long) : Long {
return originalSource.indexOf(bytes, fromIndex)
}
override fun indexOf(bytes : ByteString, fromIndex : Long) =
originalSource.indexOf(bytes, fromIndex)
@Throws(IOException::class)
override fun indexOfElement(targetBytes : ByteString) : Long {
return originalSource.indexOfElement(targetBytes)
}
override fun indexOfElement(targetBytes : ByteString) =
originalSource.indexOfElement(targetBytes)
@Throws(IOException::class)
override fun indexOfElement(targetBytes : ByteString, fromIndex : Long) : Long {
return originalSource.indexOfElement(targetBytes, fromIndex)
}
override fun indexOfElement(targetBytes : ByteString, fromIndex : Long) =
originalSource.indexOfElement(targetBytes, fromIndex)
@Throws(IOException::class)
override fun rangeEquals(offset : Long, bytes : ByteString) : Boolean {
return originalSource.rangeEquals(offset, bytes)
}
override fun rangeEquals(offset : Long, bytes : ByteString) =
originalSource.rangeEquals(offset, bytes)
@Throws(IOException::class)
override fun rangeEquals(offset : Long, bytes : ByteString, bytesOffset : Int, byteCount : Int) : Boolean {
return originalSource.rangeEquals(offset, bytes, bytesOffset, byteCount)
}
override fun rangeEquals(
offset : Long,
bytes : ByteString,
bytesOffset : Int,
byteCount : Int
) = originalSource.rangeEquals(offset, bytes, bytesOffset, byteCount)
override fun inputStream() : InputStream {
return originalSource.inputStream()
}
override fun inputStream() : InputStream? = originalSource.inputStream()
@Throws(IOException::class)
override fun read(sink : Buffer, byteCount : Long) : Long {
return originalSource.read(sink, byteCount)
}
override fun read(sink : Buffer, byteCount : Long) = originalSource.read(sink, byteCount)
override fun timeout() : Timeout {
return originalSource.timeout()
}
override fun timeout() : Timeout? = originalSource.timeout()
@Throws(IOException::class)
override fun close() {
originalSource.close()
}
override fun close() = originalSource.close()
}
}

View File

@ -3,6 +3,8 @@ buildscript {
ext.kotlin_version = '1.2.31'
ext.kotlin_coroutines_version = '0.21.2'
ext.anko_version='0.10.4'
ext.asl_version='27.1.1'
ext.firebase_version='12.0.1'
repositories {
jcenter()

View File

@ -16,7 +16,7 @@ android {
}
dependencies {
implementation 'com.android.support:appcompat-v7:27.1.0'
implementation "com.android.support:appcompat-v7:$asl_version"
}
//apply plugin: 'com.getkeepsafe.dexcount'

View File

@ -27,7 +27,7 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.0'
implementation "com.android.support:appcompat-v7:$asl_version"
// testImplementation 'junit:junit:4.12'
// androidTestImplementation 'com.android.support.test:runner:1.0.1'
// androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'