- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
@echo off
wget https://dl.google.com/android/repository/build-tools_r25.0.3-windows.zip
unzip -j build-tools_r25.0.3-windows.zip android*/lib/dx.jar
rem --- Получаем уробороса ---
dx --dex --output=dx-dexed.jar --min-sdk-version=24 dx.jar
rem +++ Уроборос получен +++
echo class nemyx >nemyx.java
echo { >>nemyx.java
echo public static void main(String[] args) throws java.lang.Exception >>nemyx.java
echo { >>nemyx.java
echo java.io.PrintStream nemyxStream = new java.io.PrintStream(System.out, true, "UTF-8"); >>nemyx.java
echo nemyxStream.printf("%%.2fдар идёт напитон.\n", Math.PI); >>nemyx.java
echo } >>nemyx.java
echo } >>nemyx.java
javac -encoding utf-8 -source 1.7 -target 1.7 nemyx.java
jar cf nemyx.jar nemyx.class
adb push dx-dexed.jar /sdcard/Download/
adb push nemyx.jar /sdcard/Download/
adb shell "cd /sdcard/Download; dalvikvm -cp dx-dexed.jar com.android.dx.command.Main --dex --output nemyx-dexed.jar nemyx.jar"
adb shell dalvikvm -cp /sdcard/Download/nemyx-dexed.jar nemyx
npopa6 13.06.2021 06:49 # +1
cKpuna4 13.06.2021 07:40 # +1
npopa6 13.06.2021 08:07 # +1
cKpuna4 13.06.2021 09:07 # +1
defecatinho 13.06.2021 10:51 # 0
defecatinho 13.06.2021 10:51 # 0
npopa6 13.06.2021 13:04 # 0
guest6 13.06.2021 13:09 # 0
npopa6 13.06.2021 13:30 # 0
guest6 13.06.2021 13:52 # 0
guest6 13.06.2021 13:53 # 0
PolinaAksenova 13.06.2021 13:54 # 0
guest6 13.06.2021 13:57 # 0
PolinaAksenova 13.06.2021 13:58 # −1
bormand 13.06.2021 14:02 # +1
PolinaAksenova 13.06.2021 14:02 # +1
Чтобы ня разглашать, Инканус он или ня Инканус?
npopa6 13.06.2021 14:35 # 0
https://twitter.com/O7_yaga_blya_ru/status/481096005136703488
PolinaAksenova 13.06.2021 14:36 # 0
npopa6 13.06.2021 14:38 # 0
Desktop 13.06.2021 14:38 # 0
Убившая миллионы пандемия, похоже, оплачена США — American Conservative http://mirtesen.ru/pad/нискажу
npopa6 13.06.2021 15:04 # 0
defecatinho 13.06.2021 14:03 # +1
npopa6 13.06.2021 14:05 # 0
defecatinho 13.06.2021 14:13 # 0
defecatinho 13.06.2021 15:25 # 0
npopa6 13.06.2021 15:27 # 0
defecatinho 13.06.2021 15:30 # 0
defecatinho 13.06.2021 15:30 # 0
Desktop 13.06.2021 15:28 # 0
npopa6 13.06.2021 15:31 # 0
defecatinho 13.06.2021 15:35 # 0
gologub 13.06.2021 15:46 # 0
MAKAKA 18.06.2021 02:29 # 0
gologub 13.06.2021 14:16 # 0
PolinaAksenova 13.06.2021 14:17 # 0
guest6 13.06.2021 14:20 # 0
PolinaAksenova 13.06.2021 14:23 # 0
bormand 13.06.2021 14:25 # +3
npopa6 13.06.2021 14:48 # 0
PolinaAksenova 13.06.2021 14:50 # +1
gologub 13.06.2021 15:31 # 0
defecatinho 13.06.2021 11:26 # +2
gologub 13.06.2021 11:36 # +2
Anaal_Nathrakh 22.06.2021 09:12 # 0
npopa6 14.06.2021 02:13 # +2
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 их не поддерживают.
guest6 14.06.2021 11:33 # +1
defecatinho 14.06.2021 11:47 # 0
inkanusinho 14.06.2021 11:54 # 0
По «Жабе»
По «PHP»
Только ты можешь знать такую инфу
Где пропадал?
npopa6 14.06.2021 11:58 # 0
inkanusinho 14.06.2021 12:00 # 0
gologub 14.06.2021 13:29 # 0
а оказалось, что это просто прораб
npopa6 16.06.2021 01:40 # 0
https://pbs.twimg.com/media/E3STPpQWEAMECn2.jpg
bormand 16.06.2021 07:33 # 0
Интересно, во сколько такой рефакторинг обойдётся?
JloJle4Ka 16.06.2021 08:52 # 0
npopa6 16.06.2021 09:14 # +2
- Люблю эту песню, - сказал я.
- Как же ты ее барин, любить можешь, если не слышал никогда? - спросил Игнат, присаживаясь рядом.
- Почему же не слышал? Это ведь старая казачья песня.
- Не, - сказал Игнат. - Путаешь. Эту песню господин барон специально для нас сочинили, чтоб мы пели и думали. А чтобы нам легче запомнить было, в ней и слова такие же, как в той песне, про которую ты говоришь, и музыка.
- В чем же тогда заключается его участие? - спросил я. - Я имею в виду, как тогда можно отличить ту песню, которая была раньше, от той, которую господин барон сочинил, если там и слова такие же, и музыка?
- А у той песни, которую господин барон сочинили, смысл совсем другой. Вот послушай, объясню. Слышь, поют: "мне малым мало спалось да во сне привиделось". Это знаешь что значит? Что хоть и не спалось, а все равно привиделось как бы во сне, понимаешь? То есть разницы нету - что спи, что не спи, все одно сон.
Виктор Пелевин. Чапаев и пустота.
guest6 16.06.2021 11:04 # 0
MAKAKA 14.06.2021 12:04 # 0
guest6 14.06.2021 12:06 # 0
MAKAKA 14.06.2021 12:07 # 0
npopa6 14.06.2021 12:23 # 0
3.14159265 29.08.2021 00:50 # 0
> В итоге мне пришлось 28-й версией dx конвертировать 25-ю. Возможно, есть ещё какие-то рабочие комбинации, нужно изучать.
Still better than «Rust»
npopa6 29.08.2021 01:06 # +1
В общем, если программы нужно запускать на Андроиде 7+, то проблем нет. А если на более древних, то придётся выяснять, какой какую версию байткода поддерживает.
ABryCTOBCKuu_nemyx 29.08.2021 01:59 # 0
bormand 29.08.2021 04:52 # +1
Ну или сдаться и скачать предпоследний бинарь.
npopa6 18.06.2021 09:25 # +3
Итого:
1. У нас есть «ecj», который получает *.class из *.java.
2. У нас есть «dx», который получает classes.dex из *.class.
3. У нас есть нативный статически собранный «zip» для любого процессора.
4. Для сборки полноценного apk-файла есть «apksigner» и нативные статически собранные «zipalign» и «aapt».
Весь процесс сборки apk или соснольного jar из исходников можно производить на «Андроиде».
JloJle4Ka 18.06.2021 09:28 # 0
3.14159265 29.08.2021 00:42 # 0
А раскрутить до jre 1.8 не удалось?
npopa6 29.08.2021 01:08 # 0
guest6 29.08.2021 01:11 # 0
3.14159265 29.08.2021 01:18 # 0
Можно с -source 1.8 собирать лямбды и методы в интерфейсах, для этого не обязательно иметь новую jre.
guest6 29.08.2021 01:44 # 0
Ну наверное так можно, по сути ведь лямбды не требуют новых опкодов (или нет?)
Какие=то опкоды типа Invokedynamic которых не было в древности небось джаве-то и не нужны
3.14159265 29.08.2021 01:47 # 0
Писать на 8ой, не используя новые классы и методы.
> Типа писать на 11-й джаве, а собираться под четвертую?
Думаю на практике это невозможно. Если уж 11я с 8ой не очень совместима...
Видел когда-то специальные тулзы для компиляции 5ой в 4ю.
guest6 29.08.2021 01:50 # +1
коко например умел компилировать свои лямбды под шестую джаву (по сути же сахар над анянянмными классами)
3.14159265 29.08.2021 01:50 # 0
ABryCTOBCKuu_nemyx 29.08.2021 01:55 # 0
3.14159265 29.08.2021 02:11 # 0
ABryCTOBCKuu_nemyx 29.08.2021 04:09 # +1
https://developer.android.com/studio/write/java8-support
У конвертора d8 есть режим «desugaring», чтобы новые фишки можно было реализовать старыми опкодами.
3.14159265 29.08.2021 12:53 # +1
> 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.
Но в целом это совершенно некритичый функционал.
Так что разработчики под ведро особо ничего не потеряли.
guest6 29.08.2021 15:52 # 0
Плюсану.
Optional без null safety ничем не лучше обычного нула
bormand 29.08.2021 16:04 # 0
Какой багор )))
Optional<Boolean>: empty, null, false, true
Desktop 29.08.2021 16:06 # 0
guest6 29.08.2021 16:36 # 0
guest6 29.08.2021 16:07 # 0
ABryCTOBCKuu_nemyx 29.08.2021 16:08 # +1
Soul_re@ver 29.08.2021 16:38 # +2
guest6 29.08.2021 16:36 # 0
А у жабаёбов да, и это очень смешно
>Эм, у вас там в optional может оказаться null?
а кто запретит?
bormand 29.08.2021 16:43 # 0
guest6 29.08.2021 16:55 # 0
3.14159265 29.08.2021 01:18 # 0
ABryCTOBCKuu_nemyx 29.08.2021 01:38 # 0
3.14159265 29.08.2021 01:44 # +1
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.
guest6 29.08.2021 01:45 # +1
Там нет свинга, там омжет быть какая-то другая питушня с тредами, может быть другой API для криптушни итд
ABryCTOBCKuu_nemyx 29.08.2021 01:53 # 0
А если делать, как я (конвертировать приложения J2SE в байткод Dalvik и запускать их в андроидовском окружении), то иногда можно натыкаться на отсутствие какого-нибудь класса или метода в стандартном для Андроида фреймворке. И тогда придётся дописывать свои врапперы, чтобы приложение запускалось.
Вот у меня, например, Jython и JRuby не пошли, потому что того, чего они хотят, нету во фреймворке Андроида.
CEHT9I6PbCKuu_nemyx 25.09.2021 00:31 # 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 25.09.2021 00:33 # +1
CEHT9I6PbCKuu_nemyx 25.09.2021 00:45 # +1
Запустим java -jar ecj-3.26.0.jar:
Во всех найденных версиях ключ -O игнорируется. У них когда-то была оптимизация, но они её отключили или наоборот включили? Или это для совместимости с другими компиляторами?
К слову, о версиях, поддерживаемых 3.26.0:
Desktop 25.09.2021 00:48 # +1
CEHT9I6PbCKuu_nemyx 25.09.2021 00:49 # +1