Итак, накурившись , до синеватого оттенка формы лица , разных мануалов, в частности Launching activities and handling results in Delphi XE5 Android apps и поморочив голову представителям ембарсадеро Brovin Yaroslav и самое главное используя метод научного втыка начинаем использовать самописный ява код в билдере.
Для начала, пытаемся написать свой ява код.
Сильно грамотные могут это реализовать в обыкновенном блокноте, а особо одаренные, типа меня, качают Android Stidio ну или Eclipse (как настроить еклипс под андроид читаем)
и пишем свой код antareyToast.java
set DX_LIB
set DX_PATH
set Java2Pas
set EMBO_DEX
set javaPath
src\com\dpfaragir\DPFActivity.java ^
Для начала, пытаемся написать свой ява код.
Сильно грамотные могут это реализовать в обыкновенном блокноте, а особо одаренные, типа меня, качают Android Stidio ну или Eclipse (как настроить еклипс под андроид читаем)
- В Android Strudio создаем новый проект
- добавляем новый класс через меню (можно руками в каталоге MyApplication1\app\src\main\java\com\antarey\myapplication1\antareyToast.java)
и пишем свой код antareyToast.java
package com.antarey;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;
public class antareyToast {
private Context context;
private Handler mHandler = new Handler(Looper.getMainLooper());
private String mMsg;
public antareyToast(Context context) {
this.context = context;
}
public void ShowToast(String msg)
{
mMsg = msg;
mHandler.post(new Runnable() {
public void run() {
Toast.makeText(context, mMsg, Toast.LENGTH_SHORT).show();
}
});
}
}
- бросаем на форму кнопку
- в MyActivity.java пишем обработчик для кнопки
public void OnButton1Click(View view)
{
antareyToast an = new antareyToast(this);
an.ShowToast("Yra");
}
- Присваиваем кнопке обработчик
Подготавливаем ява код для использования
- Качаем утилиту для получения оберток Java2Pas - она бесплатная, но генерит не весь код, при желании можно купить за 50 европейских бумажек, но смысла нету - все равно надо коррестировать
- В ява коде меняем package com.antarey.myapplication1; на package com.antarey; можно и не менять - но будет меньше структура каталогов
- В РАД Студии создаем новый пустой андроид проект
- Кидаем на форму кнопочку , сохраняемся
- В каталоге проекта создаем каталог Java
cls @echo off echo. echo del old dex if exist if exist .\classes.dex (del .\classes.dex) if exist .\classes.jar (del .\classes.jar) echo. setlocal if x%ANDROID% == x set ANDROID="c:\Users\Public\Documents\Embarcadero\Studio\14.0\PlatformSDKs\adt-bundle-windows-x86-20131030\sdk" set ANDROID_PLATFORM=%ANDROID%\platforms\android-19 set DX_LIB=%ANDROID%\build-tools\19.1.0\lib set DX_PATH=%ANDROID%\build-tools\19.1.0 set Java2Pas=d:\Робота\Программы\Java2Pas set EMBO_DEX="c:\Program Files (x86)\Embarcadero\Studio\14.0\lib\android\debug\classes.dex" set PROJ_DIR=%CD% set VERBOSE=0 set javaPath="c:\Program Files\Java\jdk1.7.0_51\bin" echo. echo Compiling the Java Sources echo. mkdir output 2> nul mkdir output\classes 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=-verbose rem %javaPath%\javac -source 1.6 -target 1.6 %VERBOSE_FLAG% -Xlint:deprecation -cp %ANDROID_PLATFORM%\android.jar -d output\classes src\com\animation\AntareyAnimation.java %javaPath%\javac %VERBOSE_FLAG% -Xlint:deprecation -cp %ANDROID_PLATFORM%\android.jar -d output\classes src\com\antarey\antareyToast.java rem Compiling multiple files rem javac %VERBOSE_FLAG% -Xlint:deprecation -cp %ANDROID_PLATFORM%\android.jar -d output\classes ^ rem src\com\dpfaragir\DPFActivity.java ^ rem src\com\dpfaragir\DPFTextView.java ^ rem src\com\dpfaragir\DPFUtils.java ^ rem src\com\dpfaragir\DPFVideoView.java echo. echo Creating jar containing the new classes echo. mkdir output\jar 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=v %javaPath%\jar c%VERBOSE_FLAG%f output\jar\test_classes.jar -C output\classes com copy output\jar\test_classes.jar .\classes.jar echo. echo Converting from jar to dex... echo. mkdir output\dex 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=--verbose call %DX_LIB%\dx.jar --dex %VERBOSE_FLAG% --output=%PROJ_DIR%\output\dex\test_classes.dex --positions=lines %PROJ_DIR%\output\jar\test_classes.jar echo. echo Merging dex files echo. %javaPath%\java -cp %DX_LIB%\dx.jar com.android.dx.merge.DexMerger %PROJ_DIR%\output\dex\classes.dex %PROJ_DIR%\output\dex\test_classes.dex %EMBO_DEX% echo Finished Merging copy output\dex\classes.dex .\classes.dex %Java2Pas%\Java2Pas.exe .\classes.jar .\ if exist .\classes.jar (del .\classes.jar) rd .\output /s /q
- в батнике проставляем свои пути для
set ANDROID
set ANDROID_PLATFORMset DX_LIB
set DX_PATH
set Java2Pas
set EMBO_DEX
set javaPath
- по тупи java\src\com\antarey\ закидываем свой antareyToast.java
- в строке %javaPath%\javac %VERBOSE_FLAG% -Xlint:deprecation -cp %ANDROID_PLATFORM%\android.jar -d output\classes src\com\antarey\antareyToast.java прописываем путь к своему antareyToast.java , если ява файлов несколько тогда что-то пипа такого
src\com\dpfaragir\DPFActivity.java ^
src\com\dpfaragir\DPFTextView.java ^
src\com\dpfaragir\DPFUtils.java ^
src\com\dpfaragir\DPFVideoView.java
- Запускаем батник на выполнение - в результате получаем :
classes.dex - библиотека, которая предоставляет РАД Студии встроенные ява библиотеки. По сути - батник генерирует ваш декс файл и объденяет его с стандартным classes.dex студии
com.antarey.antareyToast.pas - обертка, которая как раз и дает возможность использовать свой ява код - В студии - Menu->Project->Deployment добавляем свой classes.dex а со стандартного снимаем галочку
О том что в какой секции описывать очень доходчиво описано Как создавать обёртки для JAVA-кода
- в колонке Remote Path своего classes.dex прописываем classes\
- Добавляем к проекту свою обертку com.antarey.antareyToast.pas и приводим ее к божескому виду
unit com.antarey.antareyToast;
interface
uses
FMX.Helpers.Android,
Androidapi.Helpers,
AndroidAPI.JNIBridge,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.os;
type
JantareyToast = interface;
JantareyToastClass = interface(JObjectClass)
['{C4BED43A-7A25-43F2-A9BE-B2E1602FB2D8}']
function init(JContextparam0 : JContext) : JantareyToast; cdecl;
end;
[JavaSignature('com/antarey/antareyToast')]
JantareyToast = interface(JObject)
['{5AFABA34-5223-424D-A381-5F61E4B67B53}']
procedure ShowToast(JStringparam0 : JString) ; cdecl;
end;
TJantareyToast = class(TJavaGenericImport<JantareyToastClass, JantareyToast>)
end;
procedure ShowToast(ToastMsg: String);
implementation
procedure ShowToast(ToastMsg: String);
var
Activity:JantareyToast;
begin
Activity:= TJantareyToast.JavaClass.init(SharedActivityContext);
Activity.ShowToast(StringToJString(ToastMsg));
end;
procedure RegisterTypes;
begin
TRegTypes.RegisterType('com.antarey.antareyToast',TypeInfo(com.antarey.antareyToast.JantareyToast));
end;
initialization
RegisterTypes;
end.
- в Unit1.cpp добавляем ссылку на нашу обертку
#include <com.antarey.antareyToast.hpp>
- пишем обработчик для кнопочки
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowToast( UnicodeString(_D("Ура!!!! - Получилось")) );
}
//---------------------------------------------------------------------------
В итоге получаем
//---------------------------------------------------------------------------
#include <fmx.h>
#pragma hdrstop
#include "Unit1.h"
#include <com.antarey.antareyToast.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowToast( UnicodeString(_D("Ура!!!! - Получилось")) );
}
//---------------------------------------------------------------------------
- в менеджере проекта выбираем где будем тестить свое творение
Приобретаем естественный цвет лица и думаем че б еще сварганить.
Есть уже готовые обертки для всего АПИ Full Android SDK Interface Files In Object Pascal For Firemonkey , но они сгенерированы на автомате и надо перепроверять
Есть уже готовые обертки для всего АПИ Full Android SDK Interface Files In Object Pascal For Firemonkey , но они сгенерированы на автомате и надо перепроверять
Вроде как-то так
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
Есть ли возможность из Java-кода получить доступ к Context, чтоб не передавать его через TJantareyToast.JavaClass.init(SharedActivityContext)?
ОтветитьУдалитьThe Best Casinos in USA - APRCasino
ОтветитьУдалитьIt is one of the most well-known casino 1등 사이트 casinos, aprcasino and it is owned worrione.com and operated by the Rincon https://octcasino.com/ Band of Luiseno Indians. There are over 100 different