Какое влияние оказывает сборка Android на конечный APK? - PullRequest
6 голосов
/ 28 марта 2012

Мой вопрос всплыл очень похожий вопрос, этот . Но принятый ответ (единственный) указывает на другой вопрос, этот , который на самом деле не отвечает на первоначальный вопрос.

Документация Android гласит:

Цель сборки определяет, какую платформу Android вы хотели бы использовать приложение построено против.

Но что это значит на самом деле?

В моем понимании, я могу иметь minSdkVersion=4 и targetSdkVersion=10, но установить цель сборки на уровне API 4. Что произойдет? Eclipse предполагает, что я разрабатываю для уровня API 4, и любой метод, константа или любой другой метод, определенный на уровнях API выше 4, не будет мне доступен. Если я попытаюсь их использовать, приложение не будет компилироваться. Я знаю об этом.

Но позвольте мне сказать это по-другому ...

Допустим, я установил только minSdkVersion=4, targetSdkVersion не определено . Я также не использую любой метод или константу, доступные только на уровнях API выше 4. В этой ситуации действительно ли имеет значение цель сборки, которую я выбрал? Будет ли это иметь какое-либо влияние в финальном APK?

Ответы [ 3 ]

6 голосов
/ 08 апреля 2012

Создание цели

Целью сборки является уровень API Eclipse / IntelliJ / независимо от того, против чего вы используете IDE. это просто используется системой IDE / build, чтобы знать, какие API предложить вы. Если вы строите против API уровня 14, приложение все равно будет возможность работать на уровне API 7, при условии, что вы не вызываете API, которые недоступно на уровне API 7.

Я в основном устанавливаю цель сборки так же, как android: targetSdkVersion, хотя это не обязательно.

Источник: http://simonvt.net/2012/02/07/what-api-level-should-i-target/

2 голосов
/ 28 марта 2012

The way I see it, I can have the minSdkVersion=4 and targetSdkVersion=10 but set the build target to API Level 4. What will happen? Eclipse assumes I'm developing for API Level 4 and any method, constant or whatever defined on API Levels above 4 will not be available to me. If I try to use them, the application will not compile.

Когда вы устанавливаете цель сборки на уровень API 4, Eclipse не позволит вам скомпилировать любые методы, которые вы используете выше этого, потому что он строго использует уровень API 4. Однако, когда вы устанавливаете цель сборки на более высокий уровень API, в вашем случае уровень API 10, ваш APK доступен для использования с телефонами уровня API от 4 до 10.

Ответ на второй вопрос отвечает на ваш вопрос, то есть цель сборки Android, и minSdkVersion, и targetSdkVersion влияют на круг пользователей, которые могут использовать ваше приложение.

EDIT:

Поскольку вы не собираетесь определять targetSdkVersion и не используете какие-либо функции выше уровня API 4, targetSdkVersion будет таким же, как minSdkVersion. Какую бы цель сборки вы не выбрали, она будет указана автоматически. Неважно, какую цель сборки вы выберете, если она не ниже уровня API 4

Из документации Android по targetSdkVersion:

An integer designating the API Level that the application targets. If not set, the default value equals that given to minSdkVersion. This attribute informs the system that you have tested against the target version and the system should not enable any compatibility behaviors to maintain your app's forward-compatibility with the target version. The application is still able to run on older versions (down to minSdkVersion).

2 голосов
/ 28 марта 2012

Если вы используете более высокую цель сборки, вы можете написать код, который будет работать в более ранних версиях, например, с помощью отражения. Если вы хотите ограничиться только API 4, не беспокойтесь о цели сборки.

Для примера нацеливания на более ранние уровни API при компиляции для более высокого уровня вы можете посмотреть на этот вопрос:

Android: как кодировать в зависимости от версии API?

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