
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╣рдм рдХреЗ рдХрдИ рдкрд╛рдардХреЛрдВ рдиреЗ рд╕реБрдирд╛ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ рдЖрдкрдХреЛ
рдХреНрд▓рд╛рд╕рд▓реАрдпрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ
рдбреАрдПрдХреНрд╕ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди Google рдЗрд╕ рддрд░рд╣ рдХреЗ рдзреЛрдЦрд╛рдзрдбрд╝реА рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдРрд╕реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкрдХрдбрд╝реЗ рдЧрдП рд▓реЛрдЧреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЗ рд╣реИрдВред рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП!
рдЗрд╕рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдбреЗрдХреНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рджреБрднрд╛рд╖рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдУрд░реЗрдХрд▓, рд╕рдВрд╕реНрдХрд░рдг 6 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рдЬреЗрд╡реАрдПрдо рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЬрди рд░рд╛рдЗрдиреЛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣ JSR-223 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╣реБрдЖ, рдЬреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЗрдВрдЬрди рд╣реИрдВ: рд▓реБрдЖ (рд▓реБрдЬ), рдкрд╛рдпрдерди (рдЬреЗрдереЙрди), рд░реВрдмреА (рдЬреБрд░реА) рдФрд░ рдЬрд╛рд╡рд╛-рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рд░рд╛рдЗрдиреЛ, ...)ред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдПрдХ рд╡рд┐рдХрд╛рд╕ "рдкрд░реНрдпрд╛рд╡рд░рдг" рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реВрддреНрд░реЛрдВ рдХрд╛ рд▓рд┐рдВрдХ рдЫреЛрдбрд╝ рджреВрдБрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд▓реБрдЖ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рднреА рдЗрдВрдЬрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд░реЛрдХ рд░рд╣рд╛ рд╣реИред рд▓реЗрдЦрди рдХреЗ рд╕рдордп JLua рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг mvnrepository:
org.luaj: luaj-jse: 3.0.1 рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ ред
рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡рд╛рднрд┐рдорд╛рдиреА рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╖реЗрддреНрд░ рдФрд░ рдПрдХ рдмрдЯрди рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреА рдЙрдкрдЬ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдПрдХ рд╕реНрд╡рд╛рднрд┐рдорд╛рдиреА рд╡рд┐рдХрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рдпреВрдЖрдИ:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/scriptInput" android:layout_width="0dp" android:layout_height="0dp" android:gravity="top|start" android:hint="@string/write_script" android:inputType="textMultiLine" android:padding="4dp" android:textColor="#000000" app:layout_constraintBottom_toTopOf="@id/scriptOutput" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/scriptOutput" android:layout_width="0dp" android:layout_height="0dp" android:hint="@string/script_output" android:padding="4dp" android:textColor="#000000" app:layout_constraintBottom_toTopOf="@id/executeButton" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/scriptInput" /> <Button android:id="@+id/executeButton" android:layout_width="0dp" android:layout_height="48dp" android:text="@string/run_script" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Lua рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ -
рдЧреНрд▓реЛрдмрд▓реНрд╕ ред рд▓реБрдЕрдЬрд╝ рдЖрдкрдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдпрд╛ рдмрд╛рдЗрдВрдбрд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрд╡рд╕рд░ рд╕рдВрджреЗрд╢ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐
java.lang.System.out ,
java.lang.System.err рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк
рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ TextView рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ
рдЧреНрд▓реЛрдмрд▓реНрд╕ # рдПрд╕рдЯреАрдбреА рдФрд░
рдЧреНрд▓реЛрдмрд▓реНрд╕ # рдПрд╕рдЯреАрдбреАрдЖрд░рдЖрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдм рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рдЕрдкрдиреА рдХреНрд░реЗрдХ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реИред
рдпрд╣ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
private fun runLua(script: String) { val charset = StandardCharsets.UTF_8 val globals = JsePlatform.standardGlobals() val outStream = ByteArrayOutputStream() val outPrintStream = PrintStream(outStream, true, charset.name()) globals.STDOUT = outPrintStream globals.STDERR = outPrintStream try { globals.load(script).call() scriptOutput.setTextColor(Color.BLACK) scriptOutput.text = String(outStream.toByteArray(), charset) } catch (e: LuaError) { scriptOutput.setTextColor(Color.RED) scriptOutput.text = e.message } finally { outPrintStream.close() } }
рдЕрдм рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрдкрд░реЛрдХреНрдд рдмрдВрдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рдЯреЛрд╕реНрдЯ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред
CoerceJavaToLua рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди
рдмрдирд╛рдПрдВ :
globals.set("bubble", CoerceJavaToLua.coerce(Bubble(this))) ... private class Bubble(private val context: Context) {
рдореБрдЭреЗ рдЬреЛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛ рд╡рд╣ рдпрд╣ рд╣реИ:

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде, рд╣рдордиреЗ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ред рдПрдХ рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдкрд╛рдардХ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрдкрддреНрддрд┐, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдпрд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЦреЗрд▓реЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд▓реБрдЬ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЧреЗрдо рдЬрд╛рд╡рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ - рд▓рд┐рдмрдЧрдбреЗрдХреНрд╕ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣рд╛рдВ рджрд╛рдпрд░рд╛ рдХреЗрд╡рд▓ рдбреЗрд╡рд▓рдкрд░ рдХреА рдХрд▓реНрдкрдирд╛ рд╕реЗ рд╕реАрдорд┐рдд рд╣реЛрддрд╛ рд╣реИред
тЖТ
рдирдореВрдирд╛ рд╕реНрд░реЛрддтЖТ
рд▓реБрдЬтЖТ
рдЬрд┐рдердитЖТ
рдЭреБрд░реАтЖТ
рд░рд╛рдЗрдиреЛ (
рдПрдВрдбреНрд░реЙрдЗрдб рд░реИрдкрд░ )