Android номер сборки манифеста - PullRequest
3 голосов
/ 09 сентября 2010

Мне было интересно, возможно ли, чтобы Eclipse автоматически увеличивал номер версии сборки внутри Manifest каждый раз, когда я собираю или запускаю приложение для Android.

Кто-нибудь когда-либо делал что-то подобное

Ответы [ 2 ]

5 голосов
/ 09 сентября 2010

Я не думаю, что само Eclipse может это сделать, но я думаю, что вы могли бы написать скрипт, который анализирует файл манифеста и обновляет номер.Вы можете настроить это как шаг перед сборкой, поэтому каждый раз, когда Eclipse компилирует ваш код, он меняет число.

Единственное, что меня беспокоит, это то, что вы можете достичь довольно больших чисел, в зависимости от того, насколько многократнымваш процесс разработки.Кроме того, это рискует забыть обновить строку версии, и пользователям будет предложено обновить ее с версии 1.0 до версии 1.0.

0 голосов
/ 15 октября 2014

Здесь мое почти универсальное Java-приложение для обновления код версии и название версии

Почти универсальный, потому что разбор файлов не является гарантией 100% (отлично работает с хорошо отформатированным xml-манифестом и в большинстве случаев должен быть в порядке)

Выбор / предпосылка:

  • versionName должно быть major.minor.point (в соответствии с рекомендациями Android doc)
  • versionName может быть сохранено, сброшено до 1.0.0 или увеличено (одна его часть и конечная часть (и) установлены / равны 0)
  • versionCode будет заменен на Unix Time

Код:

package com.mycompany.tools;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class IncrementVersion
{
    enum INCREMENT
    {
        MAJOR, // increment 1rst component of version Code (i.e. 'major') add trailing '.0.0'
        MINOR, // preserve major, increment 2nd component of version Code (i.e. 'minor'), add trailing '.0'
        POINT, // preserver major, minor, increment 3rd component of version Code (i.e. 'point')
        NONE, // do not change versionName, only change version code (to current Unix times)
        RESET // RESET -> reset verseionNAme to 1.0.0
    }


    // update this to select which version name part to update
    static final INCREMENT increment = INCREMENT.NONE;

    static final String projectName = "com.mycompany.myproject";
    // OR static final String projectName = "com.mycompany"; -> match all my projects :-)

    public static void main(String[] args)
    {
        File directory = new File("");

        for (File projectDirecotry : directory.listFiles())
        {
            if (projectDirecotry.getName().startsWith(projectName))
            {
                exec(projectDirecotry);
            }
        }
    }

    private static void exec(File projectDirectory)
    {
        File androidManifestFile = new File(projectDirectory, "AndroidManifest.xml");
        if (androidManifestFile.exists())
        {
            writeFile(androidManifestFile, readFile(androidManifestFile));
        }
    }

    private static void writeFile(File androidManifestFile, String newContent)
    {
        BufferedWriter bw = null;
        try
        {
            bw = new BufferedWriter(new FileWriter(androidManifestFile));
            bw.write(newContent);
        } catch (Throwable th)
        {
            th.printStackTrace();
        } finally
        {
            if (bw != null)
            {
                try
                {
                    bw.close();
                } catch (Throwable th)
                {
                }
            }
        }
    }

    private static String readFile(File androidManifestFile)
    {
        StringBuilder sb = new StringBuilder();
        BufferedReader br = null;
        try
        {
            br = new BufferedReader(new FileReader(androidManifestFile));
            String line;
            while ((line = br.readLine()) != null)
            {
                sb.append(parse(line)).append('\n');
                //              System.out.println(line);
            }
        } catch (Throwable th)
        {
            th.printStackTrace();
        } finally
        {
            if (br != null)
            {
                try
                {
                    br.close();
                } catch (Throwable th)
                {
                }
            }
        }
        return sb.toString();
    }

    //  public static final DateFormat dateTimeFormat = new SimpleDateFormat("yyyyMMddHHmm", Locale.ROOT);

    public static long getUnixTime()
    {
        return System.currentTimeMillis() / 1000L;
    }

    private static String parse(String line)
    {
        {
            //      android:versionCode="1"
            // use 201408221404 instead
            String versionCodePrefix = "android:versionCode=\"";

            int indexOfVersionCodePrefix = line.indexOf(versionCodePrefix);
            if (indexOfVersionCodePrefix != -1)
            {
                indexOfVersionCodePrefix += versionCodePrefix.length();
                versionCodePrefix = line.substring(0, indexOfVersionCodePrefix);
                String versionCode = line.substring(indexOfVersionCodePrefix, line.length());

                int indexOfVersionCodeSuffix = versionCode.indexOf('"');
                if (indexOfVersionCodeSuffix != -1)
                {
                    String versionCodeSuffix = versionCode.substring(indexOfVersionCodeSuffix);
                    //                  versionCode = versionCode.substring(0, indexOfVersionCodeSuffix);
                    //                  return versionCodePrefix + (Integer.parseInt(versionCode) + 1) + versionCodeSuffix;
                    // 1409302337
                    return versionCodePrefix + getUnixTime() + versionCodeSuffix;
                }
            }
        }

        {
            if (increment != INCREMENT.NONE)
            {
                //      android:versionName="1.0.0" >

                String versionNamePrefix = "android:versionName=\"";

                int indexOfVersionNamePrefix = line.indexOf(versionNamePrefix);
                if (indexOfVersionNamePrefix != -1)
                {
                    indexOfVersionNamePrefix += versionNamePrefix.length();
                    versionNamePrefix = line.substring(0, indexOfVersionNamePrefix);
                    String versionName = line.substring(indexOfVersionNamePrefix, line.length());

                    int indexOfVersionCodeSuffix = versionName.indexOf('"');
                    if (indexOfVersionCodeSuffix != -1)
                    {
                        String versionNameSuffix = versionName.substring(indexOfVersionCodeSuffix);
                        versionName = versionName.substring(0, indexOfVersionCodeSuffix);

                        Pattern pattern = Pattern.compile("([^\\.])*\\.([^\\.])*\\.([^\\.])*");
                        Matcher m = pattern.matcher(versionName);
                        if (m.matches())
                        {
                            int major = Integer.parseInt(m.group(1));
                            int minor = Integer.parseInt(m.group(2));
                            int point = Integer.parseInt(m.group(3));

                            switch (increment)
                            {
                            case MAJOR:
                                major += 1;
                                minor = 0;
                                point = 0;
                                break;
                            case MINOR:
                                minor += 1;
                                point = 0;
                                break;
                            case POINT:
                                point += 1;
                                break;
                            case RESET:
                                major = 1;
                                minor = 0;
                                point = 0;
                                break;
                            default:
                                break;
                            }

                            return versionNamePrefix + major + '.' + minor + '.' + point + versionNameSuffix;
                        }
                    }
                }
            }
        }

        return line;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...