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
  [Ödüllü Soru] FMX Android projede input alan ve sanal klavye konumu Abdullah ILGAZ 1 73 20-07-2018, Saat: 12:37
Son Yorum: ssahinoglu
  Rad Studio C++ Android iile Editte Barkod Okutma Hatası Ahmet YILMAZ 1 380 19-07-2018, Saat: 17:01
Son Yorum: Abdullah ILGAZ
  android media player arsl01 2 65 19-07-2018, Saat: 07:55
Son Yorum: arsl01
  [Ödüllü Soru] FMX Android projede ekranın sürekli açık bırakılması Abdullah ILGAZ 1 62 17-07-2018, Saat: 12:14
Son Yorum: Cyber
  scrollbox kullanımı arsl01 10 182 12-07-2018, Saat: 11:34
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: 1 Ziyaretçi