2015-01-07 76 views
1

如何使用Gradle將Subversion版本號添加到Android APK文件?防爆。 AppName-1.1.123.apk,其中123是Subversion版本號。我正在使用Android工作室。如何使用Gradle將svn rev編號添加到Android APK?

感謝 馬庫斯

+1

你有沒有嘗試http://wickedsource.org/2014/02/28/svn-revision-gradle/? – matiash

+0

謝謝,即使Android Studio似乎無法理解它也能正常工作。有很多紅色,導入似乎失敗,但它的工作原理。 –

+0

好!您可能希望添加一個含有相關詳細信息的答案,以防鏈接將來死亡。 – matiash

回答

4

在你的根級的build.gradle文件的添加這種依賴性類路徑依賴關閉

classpath group: 'org.tmatesoft.svnkit', name: 'svnkit', version: '1.7.11' 

它看起來像這樣

現在0
buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:1.0.0' 
     classpath group: 'org.tmatesoft.svnkit', name: 'svnkit', version: '1.7.11' 

     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
    } 
} 

它的時間,使您的模塊的build.gradle文件更改

import org.tmatesoft.svn.core.wc.* 

apply plugin: 'com.android.application' 

android { 
    //YOUR OTHER CONFIGURATION 

    applicationVariants.all { variant -> 
     variant.outputs.each { output -> 
      output.outputFile = new File(
        output.outputFile.parent, 
        output.outputFile.name.replace(".apk", "-${variant.versionName}."+ getSvnRevision() + ".apk")) 
     } 
    } 


} 

dependencies { 
    //YOUR DEPENDENCIES HERE 
} 

def getSvnRevision(){ 
    ISVNOptions options = SVNWCUtil.createDefaultOptions(true); 
    SVNClientManager clientManager = SVNClientManager.newInstance(options); 
    SVNStatusClient statusClient = clientManager.getStatusClient(); 
    SVNStatus status = statusClient.doStatus(projectDir, false); 
    SVNRevision revision = status.getRevision(); 
    return revision.getNumber(); 
} 

我不使用SVN這些天,但我已遵守並在我的本地環境與硬編碼值運行此腳本和這對我來說可以。讓我知道它也適用於你。

+2

此代碼獲取svn模塊文件夾的編號。但如何獲得最後一次提交的svn號碼? – NickUnuchek

+2

@NickUnuchek,使用'getCommittedRevision()'而不是'getRevision()' – port443

+0

@ port443,謝謝 – NickUnuchek

3

這裏是我擺在那解決它的「根」的build.gradle文件中的代碼:

import org.tmatesoft.svn.core.wc.* 


buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath group: 'org.tmatesoft.svnkit', name: 'svnkit', version: '1.7.11' 
    } 
} 

def getSvnRevision(){ 
    ISVNOptions options = SVNWCUtil.createDefaultOptions(true); 
    SVNClientManager clientManager = SVNClientManager.newInstance(options); 
    SVNStatusClient statusClient = clientManager.getStatusClient(); 
    SVNStatus status = statusClient.doStatus(projectDir, false); 
    SVNRevision revision = status.getRevision(); 
    return revision.getNumber(); 
} 

allprojects { 
    version = '1.2.3.' + getSvnRevision() 
} 
+0

此代碼獲取svn模塊文件夾的編號。但如何獲得最後一次提交的svn號碼? – NickUnuchek

+0

這對於減少所有模塊build.gradle文件中的代碼冗餘非常有用。這樣,您可以簡單地在所有模塊build.gradle文件中引用「版本」。 – dell116

0

'pyus13'和'Markus K'的代碼獲取工作副本的當前svn修訂版。這對大多數情況是好的。但是,如果你想獲得服務器的最後一個版本(這是可能更大作爲你的工作拷貝的版本),你必須從服務器從你的工作副本獲得SVN修訂,而不是:

import org.tmatesoft.svn.core.wc.* 
import org.tmatesoft.svn.core.* 
import org.tmatesoft.svn.core.io.* 
import org.tmatesoft.svn.core.auth.* 
import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory; 
import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory; 
import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl; 

... 

project.ext { 
    svnUser = 'user' 
    svnPwd = 'topsecret' 
} 

... 

/**************************************************************************** 
* Add SVN revision number to version 
****************************************************************************/ 

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     // needed for getting current SVN rev nmbr 
     classpath group: 'org.tmatesoft.svnkit', name: 'svnkit', version: '1.8.14' 
    } 
} 

/** Gets the current subversion revision number. 
*/ 
def getSvnRevision() { 
    // init needed stuff for connecting SVN server 
    DAVRepositoryFactory.setup(); 
    SVNRepositoryFactoryImpl.setup(); 
    FSRepositoryFactory.setup(); 

    // getting SVN Url from local working copy ... 
    ISVNOptions options = SVNWCUtil.createDefaultOptions(true); 
    SVNClientManager clientManager = SVNClientManager.newInstance(options); 
    SVNStatusClient statusClient = clientManager.getStatusClient(); 
    SVNStatus status = statusClient.doStatus(projectDir, false); 
    SVNURL url = status.getRepositoryRootURL(); 

    // connecting SVN server and getting last revision number 
    SVNRepository repository = SVNRepositoryFactory.create(url); 
    ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(svnUser, svnPwd); 
    repository.setAuthenticationManager(authManager); 

    return repository.getLatestRevision(); 
} 

... 
相關問題