Какое влияние оказывает сборка Android на конечный APK?
У меня возник вопрос, похожий на этот вопрос. Но принятый ответ (единственный) указывает на другой вопрос, этот, который на самом деле не отвечает на первоначальный вопрос.
Документация Android гласит:
Цель сборки определяет, на какой платформе Android вы хотите построить свое приложение.
Но что это значит на самом деле?
То, как я это вижу, я могу иметь minSdkVersion=4
а также targetSdkVersion=10
но установите цель сборки на уровне API 4. Что произойдет? Eclipse предполагает, что я разрабатываю для уровня API 4, и любой метод, константа или любой другой метод, определенный на уровнях API выше 4, не будет мне доступен. Если я попытаюсь их использовать, приложение не будет компилироваться. Я знаю об этом.
Но позвольте мне сказать это по-другому...
Допустим, я только установил minSdkVersion=4
, targetSdkVersion
не определено Я также не использую какой-либо метод или константу, доступные только на уровнях API выше 4. В этой ситуации действительно ли имеет значение цель сборки, которую я выбираю? Будет ли это иметь какое-либо влияние в финальном APK?
3 ответа
Построить цель
Цель сборки - это уровень 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/
Если вы используете более высокую цель сборки, вы можете написать код, который будет работать в более ранних версиях, например, с помощью отражения. Если вы хотите ограничиться только API 4, не беспокойтесь о цели сборки.
Для примера нацеливания на более ранние уровни API при компиляции для более высокого уровня вы можете посмотреть на этот вопрос:
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
влияет на круг пользователей, которые могут использовать ваше приложение.
РЕДАКТИРОВАТЬ:
Поскольку вы не собираетесь определять 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).