Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[ÇÖZÜLDÜ] Android kütüphane kullanımı
#1
Günaydın. Android native kodlamayı test ediyorum. Şimdi A.Studio için NDK HelloJNI örneğine bakarak delphide console projesinde .so build etdim.

Edit: Çözüldü

1. hello isimli console projesi oluşturdum ve örnek bu kodları yazdım. Sadece compile etdim .so kütüphane üretmesi için.
library hello; // burada program yazıyor onu library yapın

function getYear: Integer; cdecl;
begin
 Result := 2017;
end;

exports
 getYear name 'getYear';

begin
end.

2. Bir FMX projesi oluşturdum. Project->Deployment bölümüne libhello.so ekeldim. Dosya yolu library\lib\armeabi-v7a\

uses
  System.IOUtils;

var
 Path: string;
 FLib: THandle;
 getYear: function: Integer; cdecl;

procedure loadLib(const name: string);
begin
 Path := IncludeTrailingPathDelimiter(TPath.GetLibraryPath);
 FLib := LoadLibrary(PChar(Path + 'lib' + name + '.so'));
end;

procedure TMain.Button1Click(Sender: TObject);
begin
 loadLib('hello'); // libhello.so
 if FLib <> 0 then
 begin
   getYear := GetProcAddress(Flib, 'getYear');
   ShowMessage(IntToStr(getYear()));
 end;
end;
WWW
Cevapla
#2
Görünen o ki; bahse konu library'i, tanımlı olan path'ler içinde bulamamış. Yol tanımını vererek loadlibrary ile yüklemeyi deneyebilir misiniz ?
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
(28-03-2017, Saat: 09:37)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlGörünen o ki; bahse konu library'i, tanımlı olan path'ler içinde bulamamış. Yol tanımını vererek loadlibrary ile yüklemeyi deneyebilir misiniz ?

Merhaba. Libary isminden kaynaklanıyormuş bulamama. libAndroid.so dosyasını çağırmak için tek Android yazmak gerekmiş. Onu düzeltdim ama bir olay daha var. Bu fonksiyonu register yapmak. Ben console projesi açtığımdan bazı delphi yazılım stillerini çalıştıramadım.

program Android;

//interface

uses
 Androidapi.JNI,
 Androidapi.JNIBridge,
 Androidapi.JNI.JavaTypes;
 
//implementation

function StringToJString(const Str: string): JString;
var
 LocalRef: JNIObject;
 PEnv: PJNIEnv;
begin
 PEnv := TJNIResolver.GetJNIEnv;
 LocalRef := StringToJNIString(PEnv, Str);
 Result := TJString.Wrap(LocalRef);
 PEnv^.DeleteLocalRef(PEnv, LocalRef);
end;

function stringFromJNI(PEnv: PJNIEnv; This: JNIObject): JString; cdecl;
begin
 Result:= StringToJSTring('Hello from Delphi');
end;

{
procedure RegisterNativeMethods;
var
 PEnv: PJNIEnv;
 zClass: JNIClass;
 NativeMethod: JNINativeMethod;
begin
 PEnv := TJNIResolver.GetJNIEnv;
 NativeMethod.Name := 'stringFromJNI';
 NativeMethod.Signature := '(I)Ljava/lang/String;';
 NativeMethod.FnPtr := @stringFromJNI;
 zClass := TJNIResolver.GetJavaClassID('com.zs.hellojni.MainActivity');
 if zClass <> nil then
 begin
   PEnv^.RegisterNatives(PEnv, zClass, @NativeMethod, 1);
   PEnv^.DeleteLocalRef(PEnv, zClass);
 end;
end;
}

exports
stringFromJNI name 'Java_com_zs_hellojni_MainActivity_stringFromJNI';

//initialization
 //RegisterNativeMethods;
 
begin

end.

RegisterNativeMethods fonksiyonu kayıt etmem gerekiyor ama console projesi initialization desteklemiyor.
WWW
Cevapla
#4
İyi akşamlar. O kadar uğraştan sonra java tarafında olmasada delphi tarafında çözüme ulaştım. Konu güncelledim.
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Android Yazılım Nasıl Yazılır? dkadir 4 124 18-10-2018, Saat: 13:27
Son Yorum: Abdullah ILGAZ
  Mobil platformlarda (Android, iOS) internet bağlantısı kontrolü yapmak Fesih ARSLAN 9 2.607 03-10-2018, Saat: 16:53
Son Yorum: can1963
  Android Derleme Hatası burakb44 9 174 30-09-2018, Saat: 22:45
Son Yorum: 10.Köy
  Form oluşturma (Çözüldü) Orhanlar 3 164 10-09-2018, Saat: 10:48
Son Yorum: Orhanlar
  Firemonkey Android ile OCR ve Mifare - NFC - RFID Kütüphaneleri Abdullah ILGAZ 14 953 03-09-2018, Saat: 12:42
Son Yorum: adelphiforumz



Konuyu Okuyanlar: 1 Ziyaretçi