Комментарии 22
Ну наконец-то! ) Спасибо, для нуба (как я в андроиде) — самое то! Надеюсь что на виме под маком сильно отличаться процесс не будет.
~/Library/Android/sdk/build-tools/25.0.1/aapt package -f -m -S ~/Documents/sources/android/testapp/res/ -J ./src/ -M ./AndroidManifest.xml -I ~/Library/Android/sdk/platforms/android-25/android.jar
/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/bin/java -jar ~/Library/Android/sdk/build-tools/25.0.1/jack.jar --output-dex ./bin/ -cp ~/Library/Android/sdk/platforms/android-25/android.jar -D jack.java.source.version=1.8 "./src/com/example/testapp/R.java" "./src/com/example/testapp/MainActivity.java"
~/Library/Android/sdk/build-tools/25.0.1/aapt package -f -M ./AndroidManifest.xml -S ./res/ -I ~/Library/Android/sdk/platforms/android-25/android.jar -F ./bin/AndroidTest.unsigned.apk ./bin/
подписываем
/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/bin/keytool -genkey -validity 10000 -dname «CN=AndroidDebug, O=Android, C=US» -keystore ./AndroidTest.keystore -storepass android -keypass android -alias androiddebugkey -keyalg RSA -v -keysize 2048
/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/bin/jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore ./AndroidTest.keystore -storepass android -keypass android -signedjar ./bin/AndroidTest.signed.apk ./bin/AndroidTest.unsigned.apk androiddebugkey
~/Library/Android/sdk/platform-tools/adb install ./bin/AndroidTest.signed.apk
Т.е. на вопрос «Зачем?» следует простейший ответ — научиться.
А вот это очень интересно, откуда тогда берутся целые мегабайты на «чистое» приложение без подключенных библиотек? Неужели только от стандартных ресурсов?
Ну, с мегабайтами вы погорячились, но студия создает проект сразу со стандартными иконками и подключенным саппортом. Недавно на рабочем проекте настроили proguard, и он выпилил из support-v4 12000 методов, и еще несколько тысяч из v7 (и это только код, ресурсов в саппортах тоже достаточно), что как бы намекает, откуда размер. С другой стороны, экономить полмегабайта, но писать все костыли, предусмотренные саппортами, — нет уж, увольте.
Начать следует с того, что саппорты — это не только дизайн, но и 2-3 килограмма свежего мяса куча костылей, подпирающих работу каких-то новых фишек на старых версиях. Те же фрагменты — они как бы в системе и давно есть, но в саппорте вот недавно чайлд-фрагменты пофиксили, а на устройствах с 4.0 системные как работали при выходе, так и продолжат работать.
Сам стиль Material легко вешается на приложение через обычные стили (в values-v21/styles.xml), и будет работать только на соответствующей платформе.
Во-первых, стили holo и material привести к общему знаменателю довольно накладно. Во-вторых, вряд ли пользователям 4.4 сильно понравится убогий древний дизайн. В-третьих, вам никто так делать не даст :) Ни в одной компании не скажут: "На лоллипопе пусть все будет круто, а на остальных 50% как будет, так и будет". Нарисуется один общий дизайн (в стиле material, скорее всего) и скажут реализовывать. Понятно, что для поиграться в каком-то низкоуровневом pet-project-е типа SuperSU подход без саппортов может прокатить, там дизайн — не главное. Ну, либо в телеграме — у них вообще все свое. Но опять же дизайн общий на всех версиях, просто велосипеды другие.
Нет, ничего он не погорячился с мегабайтами
Готовый apk занимает 1.4 мегабайта
Все же математические правила мне подсказывают, что 1.4 к множественному числу не округляется. К тому же мы выяснили, что, во-первых, с самого начала некоторые библиотеки все же подключены, а вот proguard не настроен.
И все же печалит, что по умолчанию подключаются толстые библиотеки, которые не всегда нужны. В большинстве небольших приложений, коих сейчас штопают пачками, без них можно вполне обойтись, а пользователь сэкономит по мегабайту с каждого такого приложения. Кто-то скажет, что сейчас-то о весе приложения уже можно и не париться. Да, возможно, если речь идет всего об одном приложении. Но если с каждого сэкономить по мегабайту, глядишь, еще одна игрушка объема Angry Birds влезет, или минута видео важного события из вашей жизни.
Если же приложению действительно нужны эти библиотеки, то это уже, как мне кажется, задача разработчика понять, что нужно их использовать. Это, конечно, требует некоторых знаний и повышает порог вхождения, но зато некачественные приложения будут фильтроваться самими пользователями, а качественный софт будет в топах.
Качество включает в себя не только размер. Саппорт библиотеки содержат в себе кучу кода в стиле:
if (Build.VERSION.SDK_INT >= 23) {
ActivityCompatApi23.something();
} else if (Build.VERSION.SDK_INT >= 21) {
ActivityCompat21.something();
} else ...
Писать все это вручную — моветон и вряд ли повысит качество.
Кстати, делал когда-то тестовое, в котором требовалось не использовать сторонние библиотеки. Так вот, саппорты использовать разрешалось. К тому же, повторюсь в N-ный раз — настройте proguard, и он на этапе сборки вырежет все неиспользуемые методы.
Например support-v7 в итоге тянет за собой по умолчанию
+--- com.android.support:appcompat-v7:23.4.0
| +--- com.android.support:animated-vector-drawable:23.4.0
| | \--- com.android.support:support-vector-drawable:23.4.0
| | \--- com.android.support:support-v4:23.4.0 (*)
Просьба — опишите то же самое, только для Android NDK. На примере Qt/С++ =)
Пожалуйста, выложите еще рас на рабочем ресурсе.
Пишем, собираем и запускаем HelloWorld для Android в блокноте. Java 8 и Android N