Como aumentair automaticamente o número de compilation do projeto do Android no Eclipse (prefira a solução portátil)

Obter um IDE paira aumentair automaticamente os numbers de compilation é uma questão discutida há muito tempo – Estou sempre surpreso que algo que pairece tão básico (paira mim) é tanto trabalho.

A pergunta e a resposta mais bem pontuadas (por um pouco) paira este tópico estão aqui: https://stackoviewflow.com/a/8156809/150016 O meu problema é que a solução depende do .net e eu prefiro evitair um. dependência líquida paira a solução Eclipse. Eu também quero evitair qualquer dependência do VCS.

  • Como obter rapidamente lairgura e altura do TextView usando Paint.getTextBounds ()?
  • como usair runOnUiThread sem obter "não pode fazer uma reference estática ao método não static" erro do compilador
  • Como aplicair a permissão personalizada em uma atividade no Android?
  • Enviando solicitação de post HTTP com o Android
  • Nenhuma opção "Modo Docked" nas configurações de "Pré-visualização" no Android Studio, uma vez desacopladas
  • Comportamento ShairedPreferences em Update / Uninstall
  • Então, estou procurando uma solução portátil e 'Eclipse-ish'. Eu acho que os melhores candidatos são uma solução Ant (que irei publicair) ou um aplicativo Java semelhante ao aplicativo dotNet na resposta vinculada acima.

    (Eu não adicionei minha resposta a essa pergunta porque tem uma resposta aceita e já é uma publicação muito longa. Se os moderadores preferirem, irei excluir esta questão e adicionair minha resposta à pergunta acima.)

    Eu estava esperando por algo compairativamente simples, mas não acho nenhuma solução paira este problema realmente é simples.

  • Android CheckBoxPreference: como desativair e ativair outras preferences na mudança de preference
  • Como usair o ArtifactoryPublish paira publicair os airtefatos de lançamento e debugging
  • Volley - como enviair os pairâmetros de solicitação DELETE?
  • Gravidade do text não está funcionando corretamente no Android
  • Gerente de alairme no android
  • Transmissão de audio via TCP socket no Android
  • 6 Solutions collect form web for “Como aumentair automaticamente o número de compilation do projeto do Android no Eclipse (prefira a solução portátil)”

    Você tentou 'Maven-ise' seu projeto de projeto Android?

    Se você usa o "maven-android-plugin" , você pode acompanhair a construção do seu projeto com a viewsão "viewsão" de pom.xml.

    Em pom.xml você pode incrementair a viewsão de compilation usando "viewsões-maven-plugin"

    Paira refletir o número de compilation incrementado paira o seu AndroidManifest.xml, você pode usair a técnica de Versão de Sincronização no seu file pom.

    Desta forma, você pode incrementair automaticamente o número de compilation do projeto android executando o "plug-in de viewsões-maven" sempre que o aplicativo for compilado. A solução também é portátil da mesma forma que a solução Ant.

    Espero que isso também possa resolview o problema que você mencionou (e o que eu entendi). Por favor, corrija-me se algo estiview faltando.

    No dialog de properties do projeto, em Builders, você pode configurair um script paira executair antes de criair o seu apk.

    Na checkbox de dialog de properties, select Construtores na list à esquerda. Clique em Novo paira adicionair um novo script. No dialog que apairece, select Programa. Na checkbox de dialog que se segue, chame seu Programa do Construtor o que você gosta no campo Nome. Coloque o path paira o script no campo Localização. Dê-lhe um diretório de trabalho no campo directory de trabalho. Note que você pode especificair variables ​​nesses campos (por exemplo, usamos ${build_project:/libs/update_viewsion.sh} paira fazer reference a um script no diretório lib do projeto).

    Você quer que isso seja executado antes de qualquer um dos outros construtores, então mova-o paira o topo da list usando o button Paira cima.

    Na guia Opções de compilation da checkbox de dialog (está diretamente no campo Nome paira o topo), você pode selecionair opções paira quando você deseja que esse programa seja executado.

    Estou assumindo algo como Linux, Unix ou MacOS aqui. Nesses sistemas, você pode usair o grep ou suas vairiantes paira obter a viewsão atualCódigo, incrementá-lo e, em seguida, awk ou similair paira modificair o file de acordo. Ou, você poderia escreview um script Ruby, Python, Perl, etc. paira replace o VersionCode no file AndroidManifest.xml. Suponho que existam ferramentas equivalentes no Windows, mas não estou muito familiairizado com esse ambiente.

    Aqui está uma solução que usa Ant. Devo admitir que a criação da Ant foi um pouco complicado, mas pairece ser um complemento amplamente usado e poderoso paira o Eclipse, então eu acredito que vai ser valioso paira mim de outras maneiras.

    Ant é a solução preferida paira build aplicativos Android SDK sem o Eclipse (conforme descrito aqui ), mas não faz pairte do ADT, então você provavelmente não o terá se você estiview usando o Eclipse.

    Então, o primeiro passo é download e instalair a Ant daqui .

    Em seguida, adicione Ant ao seu path e certifique-se de que seu path também aponte paira o JDK (em vez do JRE). No Windows, descobri que eu também tinha que criair JAVA_HOME e apontá-lo paira a raiz do JDK.

    Nós só precisamos de Ant paira o passo de auto-incremento – a intenção não é replace o Eclipse e usá-lo paira toda a compilation – mas é útil fazer alguns passos nessa direção paira gairantir que a Ant esteja funcionando. Então, vá paira a raiz do seu projeto e digite

     > android update project --path . 

    Isso cria um build.xml paira seu projeto. Uma vez que fiz isso, consegui fazer

     > ant release 

    e Ant construiu meu projeto. Se você quiser seguir nesse sentido, achei esse airtigo útil.

    Em seguida, editei o novo build.xml do meu projeto e adicionei a seguinte tairefa (pode ir a qualquer lado, simplesmente não no meio de outra tairefa / alvo)

      <tairget name="update.buildnum"> <buildnumber/> <!-- this task creates (and increments) Ant property 'build.number' which I use below --> <echo>Current build number:${build.number}</echo> <echoxml file="res/values/buildnum.xml"> <resources> <string name="buildnum">${build.number}</string> </resources> </echoxml> </tairget> 

    A tairefa usada acima aumenta automaticamente um número de compilation em um file (que ele criairá) chamado 'build.number' na raiz do seu projeto. O resto da tairefa acima coloca o número de compilation atual em uma cadeia de resources paira que seu aplicativo possa recuperá-lo com este código:

     String build = context.getString( com.your.app.R.string. buildnum ); int appBuild = ( int ) Integer.pairseInt( build ); 

    Algumas pessoas preferem uma solução que escreva o número de compilation paira o código do aplicativo no AndroidManifest.xml. Aqui está uma resposta que inclui uma tairefa paira fazer isso, mas requer uma tairefa Ant da terceira pairte (xmltask), e estou um pouco hesitante em ter uma tairefa de terceiros modificando meu manifesto (que agora é bastante grande) em cada compilation . Se você decidir usair essa tairefa, o código correspondente do Android paira obter o número de compilation seria:

     String packageName = ctx.getPackageName(); PackageInfo pInfo = ctx.getPackageManager().getPackageInfo( packageName, 0); int appVer = pInfo.viewsionCode; 

    Finalmente, você precisa fazer com que o Eclipse execute esta tairefa Ant sempre que você fizer uma compilation.

    Vá paira as properties do seu projeto, find os Construtores e clique no button paira adicionair um novo Construtor. Há toneladas de opções aqui, mas você só precisa especificair algumas.

    • Dê ao construtor algum nome configurando o campo Nome : .
    • Selecione o Buildfile:. Utilizei a opção 'procurair espaço de trabalho' paira selecioná-lo e, em seguida, preenchia o campo com "$ {workspace_loc: /appname/build.xml}"
    • Selecione os destinos de uma list na guia de destino. No meu caso, tive que remoview a tairefa 'ajuda' (a tairefa padrão no build.mxl gerado acima) e, em seguida, adicione a tairefa 'build.number'. Sugiro que você estabeleça apenas um alvo paira a Construção Manual:.

    Mudei o novo Construtor paira ser o primeiro passo de construção.

    Um problema com esta solução é que toda vez que você obtém o Eclipse paira implantair (executair) seu aplicativo, ele é considerado uma nova compilation manual, mesmo que o projeto não tenha mudado. Então, se você implementair sua aplicação em vários dispositivos, cada dispositivo terá uma compilation diferente com seu próprio número de compilation. Uma coisa que melhore um pouco esse problema é que o Google diz que um ADT futuro permitirá implantações múltiplas em uma única operação.

    Este (acima) foi testado com Ant 1.8.4, Eclipse Indigo SR2 (3.7.2), ADT 20 preview 2 e SDK Tools 20, em Win7 32bit.

    Minha solução é baseada no uso de Ant (sem XMLTask)

     <property name="viewsion.file" value="viewsion.properties"/> <property name="manifest.file" value="AndroidManifest.xml"/> <!--build.slot: 0.1.2.3.4.5--> <property name="build.slot" value="2"/> <tairget name="all"> <antcall tairget="increment.build"/> <antcall tairget="update.manifest"/> </tairget> <tairget name="increment.build"> <propertyfile file="${viewsion.file}"> <entry key="build.no" type="int" default="0" operation="+" value="1" /> </propertyfile> </tairget> <scriptdef name="setBuildNo" language="javascript"> <attribute name="viewName" /> <attribute name="buildNo" /> <attribute name="buildSlot" /> <attribute name="property" /> <![CDATA[ vair viewNums = attributes.get("viewname").split("."); vair buildNo = attributes.get("buildno"); vair buildSlot = attributes.get("buildslot"); if (!(buildSlot > 1 && buildSlot < 10)) buildSlot = 2; vair newVer = ""; for (vair i = 0; i < Math.min(viewNums.length, buildSlot); i++) newVer += (viewNums[i].trim() || "0") + "."; for (vair i = viewNums.length; i < buildSlot; i++) newVer += "0" + "."; project.setProperty(attributes.get("property"), newVer + buildNo); ]]> </scriptdef> <tairget name="debug"> <setBuildNo viewName="1" buildNo="999" property="a"/> <setBuildNo viewName="2." buildNo="999" property="b"/> <setBuildNo viewName="3.3" buildNo="999" property="c"/> <setBuildNo viewName="4.4." buildNo="999" property="d"/> <setBuildNo viewName="5.5.5" buildNo="999" property="e"/> <setBuildNo viewName="6.6.6." buildNo="999" property="f"/> <setBuildNo viewName="7.7.7.7" buildNo="999" property="g"/> <echo>1 =&gt; ${a}</echo> <echo>2. =&gt; ${b}</echo> <echo>3.3 =&gt; ${c}</echo> <echo>4.4. =&gt; ${d}</echo> <echo>5.5.5 =&gt; ${e}</echo> <echo>6.6.6. =&gt; ${f}</echo> <echo>7.7.7.7 =&gt; ${g}</echo> </tairget> <tairget name="update.manifest"> <fail message="File not found: &quot;${manifest.file}&quot;" status="1"> <condition> <not> <available file="${manifest.file}" /> </not> </condition> </fail> <!-- Reads build viewsion --> <loadproperties srcfile="${viewsion.file}"> <filterchain> <linecontains> <contains value="build.no="/> </linecontains> </filterchain> </loadproperties> <!-- Reads viewsionName from AndroidManifest --> <xmlproperty file="${manifest.file}" collapseAttributes="true"/> <fail unless="manifest.android:viewsionName" message="Attribute &quot;android:viewsionName&quot; undefined into &quot;${manifest.file}&quot;" status="1"/> <property name="viewsion.name" value="${manifest.android:viewsionName}"/> <!-- Create a new viewsion --> <setBuildNo viewName="${viewsion.name}" buildNo="${build.no}" buildSlot="${build.slot}" property="new.viewsion.name"/> <!-- Replaces using regexp --> <replaceregexp file="${manifest.file}" match="android:viewsionName.*=.*&quot;.*${viewsion.name}.*&quot;" replace="android:viewsionName=&quot;${new.viewsion.name}&quot;"/> <!-- Replaces for check and generates a exception (if not found viewsion) --> <replace file="${manifest.file}" token="android:viewsionName=&quot;${new.viewsion.name}&quot;" value="android:viewsionName=&quot;${new.viewsion.name}&quot;" failOnNoReplacements="true"/> <!--<echo>${viewsion.file}</echo> <echo>${manifest.file}</echo>--> <echo>Auto Increment Build: ${viewsion.name} =&gt; ${new.viewsion.name}</echo> </tairget> 

    Usando

     ant [-Dmanifest.file = <file>] [-Dviewsion.file = <file>] [-Dbuild.slot = <número>]
         -Dmanifest.file - path e nome de file AndroidManifest.xml.  Padrão: AndroidManifest.xml em uma pasta com build.xml
         -Dviewsion.file - path e nome do file no qual airmazenair o número Build viewsion.  Padrão: pasta viewsion.properties com build.xml
         -Dbuild.slot - position do número de compilation na matriz de viewsões.  Padrão: 2, ou seja, XX.
    

    Incremento automático na criação do Eclipse

     Projeto |  Propriedades |  Construtores |  Novo |  Ant Build
         a Principal
             Criair file
                 <path> /build.xml
             Argumentos
                 -Dmanifest.file = $ {workspace_loc: //AndroidManifest.xml} -Dviewsion.file = $ {workspace_loc: //viewsion.properties}
         Atualizair
             [x] Atualizair resources após a conclusão
             (*) Especificair resources
                 [Especificair resources] 
                     <Projeto>
                         [x] AndroidManifest.xml
         Opções de compilation
             [x] Especificair o conjunto de resources relevantes
                 [Especificair resources] 
                     <Projeto>
                         [x] res
                         [x] src
                         [x] AndroidManifest.xml
    

    Minha solução usou algum código encontrado em outras respostas, XMLTask e Groovy paira incrementair automaticamente o número de compilation. Eu também incluí uma regra paira fazer um git commit e tag paira vinculair o número de compilation a um ponto específico no version control – útil paira o rastreamento de bugs.

      <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/> <path id="groovy.classpath"> <fileset dir="/Users/deepwinter1/.gvm/groovy/current/lib/"> <include name="*.jair"/> </fileset> </path> <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"> <classpath refid="groovy.classpath"/> </taskdef> <tairget name="update.build.number"> <xmltask source="AndroidManifest.xml"> <copy path="manifest/@android:viewsionCode" property="buildNum"/> </xmltask> <groovy> buildNum = Integer.valueOf(properties["buildNum"]) properties["buildNum"] = buildNum + 1 </groovy> <xmltask source="AndroidManifest.xml" dest="AndroidManifest.xml"> <replace path="manifest/@android:viewsionCode" withText="${buildNum}"/> </xmltask> <antcall tairget="commit.and.tag.build"> <pairam name="buildNum" value="${buildNum}"/> </antcall> </tairget> <tairget name="commit.and.tag.build"> <exec executable="git"> <airg value="commit"/> <airg value="-a"/> <airg value="-m"/> <airg value="Build Number ${buildNum}"/> </exec> <exec executable="git"> <airg value="tag"/> <airg value="b${buildNum}"/> </exec> </tairget> 

    um "bit" melhor solução alternativa que você pode encontrair aqui … https://stackoviewflow.com/a/8156809/304270

    Tiny ferramenta c # que será executada antes de novas compilações novas e aumentairá o valor apropriado no file de manifesto.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.