Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Кстати, тут два комментария defecatinho подряд. Из этого можно сделать предположение, что пароль знают как минимум два человека. Но для их идентификации коньтекста мало.
dx — это не DJIuHHblu_xyu, как вы могли бы подумать, а конь Вертер байткода из JVM в Dalvik. В пятой строке он конвертирует сам себя, чтобы его можно было запустить прямо из «Андроида».
И тут возникает первый багор: новые версии dx не работают в «Андроиде», потому что с стандартной библиотеке Dalvik/ART (/system/framework) отсутствуют некоторые методы, которые есть в JRE, а старые версии dx не могут конвертировать новые программы. В итоге мне пришлось 28-й версией dx конвертировать 25-ю. Возможно, есть ещё какие-то рабочие комбинации, нужно изучать. d8, который пришёл на смену dx в новых build tools, оказался более требовательным к фреймворку.
В 15-й строке конпелируем хеллоуворлд. И тут второй багор: стандарт байткода пришлось понизить до JRE 1.7, иначе старая версия dx его не возьмёт.
Ещё один багор — кодировки в «Жабе». В «PHP» нет никакого «java.io.PrintStream», именно поэтому я за «PHP».
В 19-й строке мы прямо в «Андроиде» конвертируем приложение для JRE в приложение для Dalvik/ART (правда, не apk, а соснольное), а в 20-й запускаем посредством стандартной соснольной программы dalvikvm (в ART она генерирует нативный код на лету).
Что ещё есть? Конвертируются программы apksigner, smali, backsmali, есть нативный zip и unzip, вроде даже aapt есть, так что можно прямо в «Андроиде» разбирать и собирать программы.
«Jython» и «JRuby» не захотели конвертироваться: они используют динамическую подгрузку классов и ожидают классы в формате JVM, а Dalvik/ART их не поддерживают.
недавно узнал зобавный факт, всегда думал, что станция полежаевская названа в честь какого-то комми, который кучу неверных замочил, а потом проскользнул между ежовым и берией и отсиделся до 1954
а оказалось, что это просто прораб
- Ой, то не вечер да не ве-е-ечер, - запели строгие мужские голоса, - мне да малым мало спало-ось...
- Люблю эту песню, - сказал я.
- Как же ты ее барин, любить можешь, если не слышал никогда? - спросил Игнат, присаживаясь рядом.
- Почему же не слышал? Это ведь старая казачья песня.
- Не, - сказал Игнат. - Путаешь. Эту песню господин барон специально для нас сочинили, чтоб мы пели и думали. А чтобы нам легче запомнить было, в ней и слова такие же, как в той песне, про которую ты говоришь, и музыка.
- В чем же тогда заключается его участие? - спросил я. - Я имею в виду, как тогда можно отличить ту песню, которая была раньше, от той, которую господин барон сочинил, если там и слова такие же, и музыка?
- А у той песни, которую господин барон сочинили, смысл совсем другой. Вот послушай, объясню. Слышь, поют: "мне малым мало спалось да во сне привиделось". Это знаешь что значит? Что хоть и не спалось, а все равно привиделось как бы во сне, понимаешь? То есть разницы нету - что спи, что не спи, все одно сон.
В итоге нашлись и другие рабочие комбинации, когда я в параметрах командной строки указал другие требования к байткоду.
В общем, если программы нужно запускать на Андроиде 7+, то проблем нет. А если на более древних, то придётся выяснять, какой какую версию байткода поддерживает.
В «dalvik» успешно переводится «ecj» (Eclipse Compiler for Java). Он лёгкий и полностью написан на «Java», не требует никаких нативных модулей. Java-файлы можно компилировать прямо в «Андроиде», только «ecj» нужно подложить в bootclasspath какую-нибудь библиотеку в формате «JVM», например, «android.jar» из «android-sdk».
Итого:
1. У нас есть «ecj», который получает *.class из *.java.
2. У нас есть «dx», который получает classes.dex из *.class.
3. У нас есть нативный статически собранный «zip» для любого процессора.
4. Для сборки полноценного apk-файла есть «apksigner» и нативные статически собранные «zipalign» и «aapt».
Весь процесс сборки apk или соснольного jar из исходников можно производить на «Андроиде».
> Java 8+ language features desugaring that is available from Android Gradle Plugin 3.0.0 does not make any additional classes and APIs (such as java.util.stream.*) available for use on older Android releases.
Ну как и предполагал выше, классы из jdk8 недоступны, а сахарок со стрелочками есть.
Неплохо на самом деле.
> Sequential streams (java.util.stream)
> A subset of java.time
> java.util.function
> Recent additions to java.util.{Map,Collection,Comparator}
> Optionals (java.util.Optional, java.util.OptionalInt and java.util.OptionalDouble) and some other new classes useful with the above APIs
Это всё и яйца выебанного не стоит.
java.util.stream — просто LINQ, анскильное и неудобное при том.
Его отсутствие только ускорит разрабатываемые программы, поскольку в них будет меньше тормозной лямбда-питушни.
> java.util.function
Просто набор интерфейсов.
> Optionals (java.util.Optional, java.util.OptionalInt and java.util.OptionalDouble)
Ненужно.
Brian Goetz considers Optional.get to be the biggest mistake in Java 8.
Единственное за чем я бы пожалел это обновлённые HashMap/ConcurrentHashMap.
Но в целом это совершенно некритичый функционал.
Так что разработчики под ведро особо ничего не потеряли.
Эм, ну в доке вроде написано что get() возвращает non-null value. Или ты про то, что сам Optional<Boolean> может быть null? Там и правда запретить некому.
Условно есть какая-то общепринятая либа, требующая Йажа 8 (та же guava или apache commons).
Edit:
Ааа, понял. Там не всё так просто.
> Guava comes in two flavors.
> The JRE flavor requires JDK 1.8 or higher.
> If you need support for JDK 1.7 or Android, use the Android flavor. You can find the Android Guava source in the android directory.
Я видел порт JRE для Андроида, который не использовал Dalvik/ART и фреймворк, а шёл со своими библиотеками, чтобы не ломать голову над совместимостью. Ну и весил он много.
А если делать, как я (конвертировать приложения J2SE в байткод Dalvik и запускать их в андроидовском окружении), то иногда можно натыкаться на отсутствие какого-нибудь класса или метода в стандартном для Андроида фреймворке. И тогда придётся дописывать свои врапперы, чтобы приложение запускалось.
Вот у меня, например, Jython и JRuby не пошли, потому что того, чего они хотят, нету во фреймворке Андроида.
Я сначала скачал 4.6.1, думая, что он последний. Прыщебляди соснули!
Запустим java -jar ecj-3.26.0.jar:
Eclipse Compiler for Java(TM) v20210609-0549, 3.26.0
Copyright IBM Corp 2000, 2020. All rights reserved.
Usage: <options> <source files | directories>
If directories are specified, then their source contents are compiled.
Possible options are listed below. Options enabled by default are prefixed
with '+'.
... кучу опций пропущу ...
-O optimize for execution time (ignored)
Во всех найденных версиях ключ -O игнорируется. У них когда-то была оптимизация, но они её отключили или наоборот включили? Или это для совместимости с другими компиляторами?
К слову, о версиях, поддерживаемых 3.26.0:
Compliance options:
-1.3 use 1.3 compliance (-source 1.3 -target 1.1)
-1.4 + use 1.4 compliance (-source 1.3 -target 1.2)
-1.5 -5 -5.0 use 1.5 compliance (-source 1.5 -target 1.5)
-1.6 -6 -6.0 use 1.6 compliance (-source 1.6 -target 1.6)
-1.7 -7 -7.0 use 1.7 compliance (-source 1.7 -target 1.7)
-1.8 -8 -8.0 use 1.8 compliance (-source 1.8 -target 1.8)
-1.9 -9 -9.0 use 1.9 compliance (-source 1.9 -target 1.9)
-10 -10.0 use 10 compliance (-source 10 -target 10)
-11 -11.0 use 11 compliance (-source 11 -target 11)
-12 -12.0 use 12 compliance (-source 12 -target 12)
-13 -13.0 use 13 compliance (-source 13 -target 13)
-14 -14.0 use 14 compliance (-source 14 -target 14)
-15 -15.0 use 15 compliance (-source 15 -target 15)
npopa6 # 0
cKpuna4 # 0 ⇈
npopa6 # 0 ⇈
cKpuna4 # 0 ⇈
defecatinho # 0 ⇈
defecatinho # 0 ⇈
npopa6 # 0 ⇈
guest # 0 ⇈
npopa6 # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
PolinaAksenova # 0 ⇈
guest # 0 ⇈
PolinaAksenova # 0 ⇈
bormand # 0 ⇈
PolinaAksenova # 0 ⇈
Чтобы ня разглашать, Инканус он или ня Инканус?
npopa6 # 0 ⇈
https://twitter.com/O7_yaga_blya_ru/status/481096005136703488
PolinaAksenova # 0 ⇈
npopa6 # 0 ⇈
Desktop # 0 ⇈
Убившая миллионы пандемия, похоже, оплачена США — American Conservative http://mirtesen.ru/pad/нискажу
npopa6 # 0 ⇈
defecatinho # 0 ⇈
npopa6 # 0 ⇈
defecatinho # 0 ⇈
defecatinho # 0 ⇈
npopa6 # 0 ⇈
defecatinho # 0 ⇈
defecatinho # 0 ⇈
Desktop # 0 ⇈
npopa6 # 0 ⇈
defecatinho # 0 ⇈
gologub # 0 ⇈
MAKAKA # 0 ⇈
gologub # 0 ⇈
PolinaAksenova # 0 ⇈
guest # 0 ⇈
PolinaAksenova # 0 ⇈
bormand # 0 ⇈
npopa6 # 0 ⇈
PolinaAksenova # 0 ⇈
gologub # 0 ⇈
defecatinho # 0 ⇈
gologub # 0 ⇈
Anaal_Nathrakh # 0 ⇈
npopa6 # 0
dx — это не DJIuHHblu_xyu, как вы могли бы подумать, а конь Вертер байткода из JVM в Dalvik. В пятой строке он конвертирует сам себя, чтобы его можно было запустить прямо из «Андроида».
И тут возникает первый багор: новые версии dx не работают в «Андроиде», потому что с стандартной библиотеке Dalvik/ART (/system/framework) отсутствуют некоторые методы, которые есть в JRE, а старые версии dx не могут конвертировать новые программы. В итоге мне пришлось 28-й версией dx конвертировать 25-ю. Возможно, есть ещё какие-то рабочие комбинации, нужно изучать. d8, который пришёл на смену dx в новых build tools, оказался более требовательным к фреймворку.
В 15-й строке конпелируем хеллоуворлд. И тут второй багор: стандарт байткода пришлось понизить до JRE 1.7, иначе старая версия dx его не возьмёт.
Ещё один багор — кодировки в «Жабе». В «PHP» нет никакого «java.io.PrintStream», именно поэтому я за «PHP».
В 19-й строке мы прямо в «Андроиде» конвертируем приложение для JRE в приложение для Dalvik/ART (правда, не apk, а соснольное), а в 20-й запускаем посредством стандартной соснольной программы dalvikvm (в ART она генерирует нативный код на лету).
Что ещё есть? Конвертируются программы apksigner, smali, backsmali, есть нативный zip и unzip, вроде даже aapt есть, так что можно прямо в «Андроиде» разбирать и собирать программы.
«Jython» и «JRuby» не захотели конвертироваться: они используют динамическую подгрузку классов и ожидают классы в формате JVM, а Dalvik/ART их не поддерживают.
guest # 0 ⇈
defecatinho # 0 ⇈
inkanusinho # 0 ⇈
По «Жабе»
По «PHP»
Только ты можешь знать такую инфу
Где пропадал?
npopa6 # 0 ⇈
inkanusinho # 0 ⇈
gologub # 0 ⇈
а оказалось, что это просто прораб
npopa6 # 0 ⇈
https://pbs.twimg.com/media/E3STPpQWEAMECn2.jpg
bormand # 0 ⇈
Интересно, во сколько такой рефакторинг обойдётся?
JloJle4Ka # 0 ⇈
npopa6 # 0 ⇈
- Люблю эту песню, - сказал я.
- Как же ты ее барин, любить можешь, если не слышал никогда? - спросил Игнат, присаживаясь рядом.
- Почему же не слышал? Это ведь старая казачья песня.
- Не, - сказал Игнат. - Путаешь. Эту песню господин барон специально для нас сочинили, чтоб мы пели и думали. А чтобы нам легче запомнить было, в ней и слова такие же, как в той песне, про которую ты говоришь, и музыка.
- В чем же тогда заключается его участие? - спросил я. - Я имею в виду, как тогда можно отличить ту песню, которая была раньше, от той, которую господин барон сочинил, если там и слова такие же, и музыка?
- А у той песни, которую господин барон сочинили, смысл совсем другой. Вот послушай, объясню. Слышь, поют: "мне малым мало спалось да во сне привиделось". Это знаешь что значит? Что хоть и не спалось, а все равно привиделось как бы во сне, понимаешь? То есть разницы нету - что спи, что не спи, все одно сон.
Виктор Пелевин. Чапаев и пустота.
guest # 0 ⇈
MAKAKA # 0 ⇈
guest # 0 ⇈
MAKAKA # 0 ⇈
npopa6 # 0 ⇈
3.14159265 # 0 ⇈
> В итоге мне пришлось 28-й версией dx конвертировать 25-ю. Возможно, есть ещё какие-то рабочие комбинации, нужно изучать.
Still better than «Rust»
npopa6 # 0 ⇈
В общем, если программы нужно запускать на Андроиде 7+, то проблем нет. А если на более древних, то придётся выяснять, какой какую версию байткода поддерживает.
ABryCTOBCKuu_nemyx # 0 ⇈
bormand # 0 ⇈
Ну или сдаться и скачать предпоследний бинарь.
npopa6 # 0
Итого:
1. У нас есть «ecj», который получает *.class из *.java.
2. У нас есть «dx», который получает classes.dex из *.class.
3. У нас есть нативный статически собранный «zip» для любого процессора.
4. Для сборки полноценного apk-файла есть «apksigner» и нативные статически собранные «zipalign» и «aapt».
Весь процесс сборки apk или соснольного jar из исходников можно производить на «Андроиде».
JloJle4Ka # 0 ⇈
3.14159265 # 0 ⇈
А раскрутить до jre 1.8 не удалось?
npopa6 # 0 ⇈
guest # 0 ⇈
3.14159265 # 0 ⇈
Можно с -source 1.8 собирать лямбды и методы в интерфейсах, для этого не обязательно иметь новую jre.
guest # 0 ⇈
Ну наверное так можно, по сути ведь лямбды не требуют новых опкодов (или нет?)
Какие=то опкоды типа Invokedynamic которых не было в древности небось джаве-то и не нужны
3.14159265 # 0 ⇈
Писать на 8ой, не используя новые классы и методы.
> Типа писать на 11-й джаве, а собираться под четвертую?
Думаю на практике это невозможно. Если уж 11я с 8ой не очень совместима...
Видел когда-то специальные тулзы для компиляции 5ой в 4ю.
guest # 0 ⇈
коко например умел компилировать свои лямбды под шестую джаву (по сути же сахар над анянянмными классами)
3.14159265 # 0 ⇈
ABryCTOBCKuu_nemyx # 0 ⇈
3.14159265 # 0 ⇈
ABryCTOBCKuu_nemyx # 0 ⇈
https://developer.android.com/studio/write/java8-support
У конвертора d8 есть режим «desugaring», чтобы новые фишки можно было реализовать старыми опкодами.
3.14159265 # 0 ⇈
> Java 8+ language features desugaring that is available from Android Gradle Plugin 3.0.0 does not make any additional classes and APIs (such as java.util.stream.*) available for use on older Android releases.
Ну как и предполагал выше, классы из jdk8 недоступны, а сахарок со стрелочками есть.
Неплохо на самом деле.
> Sequential streams (java.util.stream)
> A subset of java.time
> java.util.function
> Recent additions to java.util.{Map,Collection,Comparator}
> Optionals (java.util.Optional, java.util.OptionalInt and java.util.OptionalDouble) and some other new classes useful with the above APIs
Это всё и яйца выебанного не стоит.
java.util.stream — просто LINQ, анскильное и неудобное при том.
Его отсутствие только ускорит разрабатываемые программы, поскольку в них будет меньше тормозной лямбда-питушни.
> java.util.function
Просто набор интерфейсов.
> Optionals (java.util.Optional, java.util.OptionalInt and java.util.OptionalDouble)
Ненужно.
Brian Goetz considers Optional.get to be the biggest mistake in Java 8.
Единственное за чем я бы пожалел это обновлённые HashMap/ConcurrentHashMap.
Но в целом это совершенно некритичый функционал.
Так что разработчики под ведро особо ничего не потеряли.
guest # 0 ⇈
Плюсану.
Optional без null safety ничем не лучше обычного нула
bormand # 0 ⇈
Какой багор )))
Optional<Boolean>: empty, null, false, true
Desktop # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
ABryCTOBCKuu_nemyx # 0 ⇈
[email protected] # 0 ⇈
guest # 0 ⇈
А у жабаёбов да, и это очень смешно
>Эм, у вас там в optional может оказаться null?
а кто запретит?
bormand # 0 ⇈
guest # 0 ⇈
3.14159265 # 0 ⇈
ABryCTOBCKuu_nemyx # 0 ⇈
3.14159265 # 0 ⇈
Edit:
Ааа, понял. Там не всё так просто.
> Guava comes in two flavors.
> The JRE flavor requires JDK 1.8 or higher.
> If you need support for JDK 1.7 or Android, use the Android flavor. You can find the Android Guava source in the android directory.
https://guava.dev/
Если бы на ондроиде была нормальная 1.8, они не пердолились c джвумя версиями и давно бы забили на саппорт 1.7.
guest # 0 ⇈
Там нет свинга, там омжет быть какая-то другая питушня с тредами, может быть другой API для криптушни итд
ABryCTOBCKuu_nemyx # 0 ⇈
А если делать, как я (конвертировать приложения J2SE в байткод Dalvik и запускать их в андроидовском окружении), то иногда можно натыкаться на отсутствие какого-нибудь класса или метода в стандартном для Андроида фреймворке. И тогда придётся дописывать свои врапперы, чтобы приложение запускалось.
Вот у меня, например, Jython и JRuby не пошли, потому что того, чего они хотят, нету во фреймворке Андроида.
CEHT9I6PbCKuu_nemyx # 0
Тут версии от 3.3.1 до 4.6.1, датированные годами 2011-2016:
https://repo1.maven.org/maven2/org/eclipse/jdt/core/compiler/ecj/
А тут версии от 3.12.3 до 3.27.0, датированные годами 2017-2021:
https://repo1.maven.org/maven2/org/eclipse/jdt/ecj/
3.27.0 уже не запускается на восьмой «JVM».
Получается, что 3.12.3 новее, чем 4.6.1. Как так получилось? Они отменили четвёртую ветку и вернулись к третьей?
Desktop # 0 ⇈
CEHT9I6PbCKuu_nemyx # 0 ⇈
Запустим java -jar ecj-3.26.0.jar:
Во всех найденных версиях ключ -O игнорируется. У них когда-то была оптимизация, но они её отключили или наоборот включили? Или это для совместимости с другими компиляторами?
К слову, о версиях, поддерживаемых 3.26.0:
Desktop # 0 ⇈
CEHT9I6PbCKuu_nemyx # 0 ⇈