2013-10-07 32 views
11

我有一個大問題,當我來籤我的應用程序:我已經設置了簽約配置按照文檔:「簽署配置應該在搖籃中指定構建腳本」 ......我做到了

signingConfigs { 
    release { 
     storeFile file("lomapnew.keystore") 
     storePassword "myPassword" 
     keyAlias "myAlias" 
     keyPassword "Something...." 
    } 
} 

但我仍然收到此錯誤信息:「簽約配置應該在搖籃中指定構建腳本」

enter image description here

+0

您是否爲發佈buildType設置了此簽名配置? – Krylez

+0

我想這個消息意味着你需要在Gradle文件中的'buildscript {}'裏面使用signingConfigs。 –

+1

@JBNizet我不認爲這是真的,或者至少對我的配置來說不是這樣。 – Krylez

回答

19

我要出去肢體和猜測,你有沒有設置發佈構建類型的簽名配置。調試構建類型是自動的,所以這不是顯而易見的,這是所有其他構建類型(包括髮行版)的必要步驟。

您可以將簽名的配置,像這樣:

android { 
    signingConfigs { 
     // It's not necessary to specify, but I like to keep the debug keystore 
     // in SCM so all our debug builds (on all workstations) use the same 
     // key for convenience 
     debug { 
      storeFile file("debug.keystore") 
     } 
     release { 
      storeFile file("release.keystore") 
      storePassword "myPassword" 
      keyAlias "myAlias" 
      keyPassword "Something...." 
     } 
    } 

    buildTypes { 
     /* This one happens automatically 
     debug { 
      signingConfig signingConfigs.debug 
     } 
     */ 
     release { 
      signingConfig signingConfigs.release 
     } 
    } 
} 
+0

你能告訴我爲了使文件(「release.keystore」)能夠工作,應該在哪裏放置'release.keystore'文件? – Bhargav

+0

@Bhargav文件方法與項目根目錄有關。只要您更新構建文件中的路徑,密鑰庫就可以在項目中的任何地方生存。 https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html#file(java.lang.Object) – Krylez

+0

在git中私人備份密鑰庫文件和倉庫是否明智? – Bhargav

0

答案已經給出,但我想強調的其他方式也 我們可以手動指定象下面,我們必須指定完整的信息路徑給我們的密鑰庫的位置這樣

signingConfigs { 
    release { 
     storeFile file('O:/Android/Projects/yourKeyStore.jks') 
     storePassword "qwerty" 
     keyAlias "yourProjectKeyAlias" 
     keyPassword "ProjectKeyPassword" 
    } 
} 

這也可以在簽署報告規定,如果你在

去文件 - >項目結構

選擇您的項目應用程序模塊,並選擇您可以填寫信息的簽署報告,它會自動在gradle文件中添加以前的版本信息。

最後,你只需要在buildTypes {...}部分添加

signingConfig android.signingConfigs.release 

。這將完成簽署程序。

0

我喜歡將密碼保留在我的構建文件中。因此,我創建了一個屬性文件,我加載使用

def keystorePropertiesFile = rootProject.file("./local.properties") 
def keystoreProperties = new Properties() 
keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) 

然後我定義signingConfigs像這樣:

signingConfigs { 
    releaseSigning { 
     storeFile file(keystoreProperties['storeFile']) 
     storePassword keystoreProperties['keystore.live.storepassword'] 
     keyAlias = keystoreProperties['keystore.live.keyalias'] 
     keyPassword = keystoreProperties['keystore.live.keypassword'] 
    } 
    debugSigning { 
     storeFile file(keystoreProperties['storeFile']) 
     storePassword keystoreProperties['keystore.debug.storepassword'] 
     keyAlias = keystoreProperties['keystore.debug.keyalias'] 
     keyPassword = keystoreProperties['keystore.debug.keypassword'] 
    } 
} 

這並不與菜單選項「創建簽名的apk」,所以我創建口味很好地工作:

productFlavors { 
    mydebug { 
     signingConfig signingConfigs.debugSigning 
    } 
    myrelease { 
     signingConfig signingConfigs.releaseSigning 
    } 
} 

現在簽名配置與工具欄上的運行按鈕一起工作。對於默認密鑰庫中的local.properties看起來像

ndk.dir=/opt/sdk/ndk-bundle 
sdk.dir=/opt/sdk 
storeFile=/home/christine/.android/debug.keystore 
keystore.debug.storepasswd=android 
keystore.debug.keyalias=androiddebugkey 
keystore.debug.keypassword=android 
keystore.live.storepasswd=android 
keystore.live.keyalias=androiddebugkey 
keystore.livetest.keypassword=android 

在你詹金斯構建腳本,你需要創建一個local.properties到屬性文件是您的構建服務器上的符號鏈接。