Jump to content

pcplayer99

Members
  • Content Count

    76
  • Joined

  • Last visited

Community Reputation

10 Good

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. pcplayer99

    Delphi 10.4.2 CE support Android API 30

    Hi Dmitry, My new progress: Yesterday I have tested Android API-level 30 at a new blank FMX project, it's OK. And then I have tested a old project at release mode, it still report the same error message: INSTALL_PARSE_FAILED_NO_CERTIFICATES But if I selected debug mode, the same old project can install successed at API-level 30. I compared all XML files of release mode and debug mode but can not find anything. But if I change API-level 30 to 29 at release mode, it can installed successed. Finally, I created a new project and added all files of the old project into it, and then at Android release mode, changed API-level to 30, builded and deployed to my phone, it was successed. thanks Dmitry.
  2. pcplayer99

    SOAP Client Android

    In good old days, my manifest like this: <application android:persistent="%persistent%" android:restoreAnyVersion="%restoreAnyVersion%" android:label="%label%" android:debuggable="%debuggable%" android:largeHeap="%largeHeap%" android:icon="%icon%" android:theme="%theme%" android:hardwareAccelerated="%hardwareAccelerated%" android:resizeableActivity="false" android:usesCleartextTraffic="true"> And it can access web server through "HTTP" in Android. but Android 11, I don't know.
  3. pcplayer99

    Delphi 10.4.2 CE support Android API 30

    Thanks Dmitry. It works! A little update: <Exec Command=""$(ApkSigner)" sign --ks $(KeyStoreFile) --ks-pass pass:$(KeyStorePass) $(SIGNED_APK_FILENAME)" ContinueOnError="True"> when open project, it shows a error message, and then fail. I look through carefully the CodeGear.development.Targets file, found that: <Exec Command="&quot;$(BDS)\bin\convert.exe&quot; -b -e.fsx &quot;%(ConvertForm.BaseName)&quot;" ContinueOnError="True"> <Exec Command="&quot;$(BDS)\bin\convert.exe&quot; -b -e.fsx &quot;%(ConvertForm.BaseName)&quot;" ContinueOnError="True"> So, I update the above line to: <Exec Command="&quot;$(ApkSigner)&quot; sign --ks $(KeyStoreFile) --ks-pass pass:$(KeyStorePass) $(SIGNED_APK_FILENAME)" ContinueOnError="True"> And open project successed. And then I can install APK to my phone after I update android:targetSdkVersion="30" Thanks a lot.
  4. pcplayer99

    Delphi 10.4.2 CE support Android API 30

    Thanks Dmtry. I'll try.
  5. pcplayer99

    Delphi 10.4.2 CE support Android API 30

    Thanks Vave. According to your tips, I googled on line and got this: xamarin.android - Xamarin App - Can't deploy to Android 11 emulator - Stack Overflow Its says that: "Apps that target Android 11 (API level 30) that are currently only signed using APK Signature Scheme v1 must now also be signed using APK Signature Scheme v2 or higher. Users can't install or update apps that are only signed with APK Signature Scheme v1 on devices that run Android 11."
  6. pcplayer99

    Delphi 10.4.2 CE support Android API 30

    thanks Dave.
  7. I have installed Delphi 10.4.2 CE version. All configurations is default by delphi installer. My phone is OPPO and its Android version is Android 11. New a FireMonkey project, connected my phone to my PC, and run it, everythiing is OK. But if I upload this APP to Google play APP store, it says APP's API level is 29, it must be API level 30. I run "C:\Users\Public\Documents\Embarcadero\Studio\21.0\CatalogRepository\AndroidSDK-2525-21.0.40680.4203\SDK Manager.exe“, it is installed by Delphi. And there are Android 10 (API 29), Android 9(API 28) ... etc. There are no API 30. So, I run "C:\Users\Public\Documents\Embarcadero\Studio\21.0\CatalogRepository\AndroidSDK-2525-21.0.40680.4203\tools\bin\sdkmanager.bat" to download API 30 and its done. And then re-start "SDK Manager.exe", I can see "Android 11(API 30)" in it. And in this directroy "C:\Users\Public\Documents\Embarcadero\Studio\21.0\CatalogRepository\AndroidSDK-2525-21.0.40680.4203\platforms", there was added a directory named "android-30". So it seems I have API 30 in my system. In Delphi IDE menu: Tools - Options - Deployment - SDK Manager, SDK API-level location option is set by Delphi, it is "C:\Users\Public\Documents\Embarcadero\Studio\21.0\CatalogRepository\AndroidSDK-2525-21.0.40680.4203\platforms\android-29", I changed it to "C:\Users\Public\Documents\Embarcadero\Studio\21.0\CatalogRepository\AndroidSDK-2525-21.0.40680.4203\platforms\android-30"; And then re-deploy this APP and upload to Google play, it still says my APP is on API 29. I can not find any tips in IDE menu to change API level, so I check "AndroidManifest.xml" under "D:\MyProjectFile\Android64\Release", there is: <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="29" /> I try to modify "D:\MyProjectFile\AndroidManifest.template.xml" from default: <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" /> to: <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="30" /> to force it be API-30. And re-build, deploy, and then upload to Google play, it works. No warning messages. But, if I set project's "Configuration" to "Development" in IDE and press F9 to let it run in my phone, when it is installing in my phone, it is failed, and Delphi shows error message: adb: failed to install D:\MyProjectFile\Android64\Debug\testAndroid_11\bin\testAndroid_11.apk: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] And then I change "AndroidManifest.template.xml" to default, and re-build and deploy and press F9, it has installed in my phone success and worked fine. And then I check "AndroidManifest.xml", it is "<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="29" /> " again. Repeat modify "AndroidManifest.template.xml" again and again, I'm sure if I set targetSDKVersion=29, it can install in my phone successed, if I changed it to targetSDKVersion=30, it install in my phone will be failed and the error message is: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]. If I change targetSDKVersion=29 to targetSDKVersion=30, and then set my project Configuration to "Application Store" build and deploy then I got my AAB file and can upload Google play successed, but I am not sure if it can installing success when a phone install it from Google play. I have searched on internet, but no any message about this.
  8. with MyDataSet do begin FieldByName('aaa').AsString := 'abcd'; FieldByName('bbb').AsInteger := 234; etc... end; This ca reduce typing.
  9. Thanks FredS, after I add "With Self do" in my helper class, it can access provate field in another unit. in unit1, here is TMyClassB: TMyClassB = class private FMyClassA: TMyClassA; function GetMyName: string; public constructor Create; property MyName: string read GetMyName; end; in Unit2, here is my helper class: TMyClassB3 = class helper for TMyClassB public constructor Create(B: Boolean); overload; end; constructor TMyClassB3.Create(B: Boolean); begin //if B then FMyClassA := TMyClassA2.Create; //helper class can not access private field. //use with self do, here can access private field with Self do begin FMyClassA := TMyClassA2.Create; end; end;
  10. My test code as: constructor TMyClassB3.Create(B: Boolean); begin if B then FMyClassA := TMyClassA2.Create; end; The field "FMyClassA" is declared in TMyClassB2 in another unit, and this code can not compile. because field "FMyClassA" is a private field of TMyClassB2.
  11. I have done a test if the class helper is in a different unit with the original class, it can not access private field in original class.
  12. Thank you Fred. I will try helper class mode.
  13. Yes, this is why I do not want to copy it and modify it, I just want to inherit a new class in a new unit, to avoid modify Delphi's source file.
  14. In unit Soap.SOAPLinked.pas there are: 1. TLinkedWebNode 2. TLogLinkedWebNode = class(TLinkedWebNode) 3. TLinkedRIO = class(TRIO) in TLinkedRIO, it has two constructor: one is for: FLinkedWebNode := TLinkedWebNode.Create(nil); and another is for: FLinkedWebNode := TLogLinkedWebNode.Create(nil); My question is: if I want to create a new TLinkedWebNode like TLogLinkedWebNode, Just named it TMyWebNode, I must let TLinkedRIO has a new constructor that lets it create FLinkedWebNode as my new TMyWebNode. but, I can not modify Soap.SOAPLinked.pas because it is source code in Delphi. I will create a new pas file and inherit TLinkedRIO like TMyRIO = class(TLinkedRIO) and add a new constructor in it. but, the new TMyRIO in a new pas unit, I can not access FLinkedWebNode like FLinkedWebNode := TMyWebNode.Create(nil); So, is there any way to do that? or this is a design issue in Soap.SOAPLinked.pas and I must modify it?
  15. pcplayer99

    Drone control from mobile

    I have made a drone controller APP years ago. It was made by Firemonkey, through WiFi to communication with a WiFi camera, play real time video stream from camera on the drone, and send control command to camera and the camera forward this command to drone controller through UART.
×