引導專案
引入 Google SST Speech 這個專案到現有專案時,要做兩件事,才能正確引導。
Gradle Project 修正 Dependencies
匯入專案後,會馬上缺少 Project 中要的 Protobuf ,因此要在 Project 的 build.gradle 增加,以及原本專案使用的 com.novoda:bintray-release:0.4.0 需要升級 0.5.0 (2018年),設定如下:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
maven { url 'https://maven.google.com' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.novoda:bintray-release:0.5.0'
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven { url 'https://maven.google.com' }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
匯入的專案更改應用程式為類別庫
由於匯入的專案如果是應用程式,可能在引用 gradle 的 compile 的時候會出錯,所以要修正該匯入模組的 build.gradle ,把一開始 apply plugin 的設定值 com.android.application 改為 library ,以及把 applicationId 拿掉,所有設定如下:
/*
* Copyright 2016 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
apply plugin: 'com.android.library' //把 com.android.application 改為 library
apply plugin: 'com.google.protobuf'
ext {
supportLibraryVersion = '25.4.0'
grpcVersion = '1.4.0'
}
android {
compileSdkVersion 25
buildToolsVersion '26.0.2'
flavorDimensions "dev"
defaultConfig {
//applicationId "com.google.cloud.android.speech" 移除 applicationId
targetSdkVersion 25
versionCode 1
versionName '1.0'
}
signingConfigs {
release {
storeFile file(project.properties.storeFile)
storePassword project.properties.storePassword
keyAlias project.properties.keyAlias
keyPassword project.properties.keyPassword
}
}
productFlavors {
dev {
// Minimum version with platform multi-dex support
minSdkVersion 21
targetSdkVersion 25
multiDexEnabled true
}
/*prod {
// Minimum version that can run gRPC (TLS extension)
minSdkVersion 16
targetSdkVersion 25
multiDexEnabled true
}*/
}
buildTypes {
debug {
minifyEnabled false
multiDexEnabled true
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
configurations.all {
resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.2'
resolutionStrategy.force "com.android.support:support-annotations:$supportLibraryVersion"
}
}
protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.3.0'
}
plugins {
javalite {
artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0"
}
grpc {
artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
}
}
generateProtoTasks {
all().each { task ->
task.plugins {
javalite {}
grpc {
// Options added to --grpc_out
option 'lite'
}
}
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
// Support libraries
compile "com.android.support:design:$supportLibraryVersion"
compile "com.android.support:cardview-v7:$supportLibraryVersion"
compile "com.android.support:recyclerview-v7:$supportLibraryVersion"
// gRPC
compile "io.grpc:grpc-okhttp:$grpcVersion"
compile "io.grpc:grpc-protobuf-lite:$grpcVersion"
compile "io.grpc:grpc-stub:$grpcVersion"
compile 'javax.annotation:javax.annotation-api:1.2'
protobuf 'com.google.protobuf:protobuf-java:3.3.1'
// OAuth2 for Google API
compile('com.google.auth:google-auth-library-oauth2-http:0.7.0') {
exclude module: 'httpclient'
}
//Tests
testCompile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
}
task copySecretKey(type: Copy) {
def File secretKey = file "$System.env.GOOGLE_APPLICATION_CREDENTIALS"
from secretKey.getParent()
include secretKey.getName()
into 'src/main/res/raw'
rename secretKey.getName(), "credential.json"
}
preBuild.dependsOn(copySecretKey)
匯入 gradle.properties
因為匯入後,可能會出現 path 是空的這樣的錯誤,因此需要從原有的專案中,把它的 gradle.properties 檔案的參數複製到現在專案的 gradle.properties 裡面,設定是:
# Sign key settings storeFile=../../../../../.android/debug.keystore storePassword=android keyAlias=androiddebugkey keyPassword=android
Compile 專案的方式
專案中需要用到 com.google.cloud.speech....之類的 api,所以需要在你使用的應用程式的 Module Gradle 設定檔( build.Gradle: app ),在下面的 dependencies 加入:
dependencies {
...
compile project(path: GoolgeSpeechSDK)
...
}
解決 Could not resolve project
直接引用 compile project(path: GoolgeSpeechSDK) 可能會導致出錯:
錯誤的意思是你沒有選擇 Gradle 的設定,這時候,可以用讓專案選擇設定檔的方式來完成,有以下的語法可以實現選擇:
implementation project(path: ':GoogleSpeechSDK', configuration: 'default')
或是
或是
annotationProcessor project(':GoogleSpeechSDK')
或是
compile project(path: ':gcpsst', configuration: 'default')
如果最後都沒辦法解決,那請直接到該模組的 build.gradle ,把 productFlavors 設定下其中的 prod 做註解:
Reference:
https://stackoverflow.com/questions/44105127/android-studio-3-0-flavor-dimension-issue
https://github.com/GoogleCloudPlatform/android-docs-samples/issues/54
http://blog.csdn.net/losingcarryjie/article/details/78945597
https://stackoverflow.com/questions/32021074/in-android-studio-how-can-i-change-an-app-project-to-a-library
http://blog.csdn.net/u010665691/article/details/44355323
http://blog.csdn.net/liranke/article/details/72866423
http://blog.csdn.net/kerwinJu/article/details/53053853
https://www.jianshu.com/p/af1eee86f24e
https://stackoverflow.com/questions/34421193/could-not-determine-the-dependencies-of-task-appcrashlyticsstoredeobsdebug-i
https://juejin.im/entry/59f6755a51882567aa5a9faf
https://stackoverflow.com/questions/45679847/android-studio-3-0-compile-issue-cannot-choose-between-configurations
http://www.voidcn.com/article/p-knsmzuea-bqp.html
https://stackoverflow.com/questions/32021074/in-android-studio-how-can-i-change-an-app-project-to-a-library
沒有留言:
張貼留言