Delphi西雅图在Android上显示delpoy错误在执行时,我嵌入一个自己编写的Java库



在编译过程中,我得到一个客户端错误。有人知道为什么和如何解决这个问题吗?

我是这样做的:

  1. 我尝试嵌入Java函数到我的Delphi程序,因为那里似乎没有其他的解决方案来添加MediabuttonReceiver。
  2. 我用javac成功编译了一个Java代码(代码如下所示)从Delphi的安装(编译)脚本片段给出下文)。我将编译好的jar文件添加到我的Delphi项目中,作为额外的库并编译Delphi程序。
  3. 编译成功,但在部署期间,我得到下面的错误信息(对不起,这是一个德国Delphi版本)。如果我在没有Java库的情况下编译,则该过程是成功的,因此错误似乎与我包含的jar文件有关。
 paclient-Befehlszeile
  c:program filesembarcaderostudio17.0binpaclient.exe -u8 
  --aaptpackage="C:UsersPublicDocumentsEmbarcaderoStudio17.0PlatformSDKsandroid-sdk-windowsbuild-tools23.0.3aapt.exe,.AndroidDebugProject1library,.AndroidDebugProject1classes,.AndroidDebugProject1res,.AndroidDebugProject1assets,.AndroidDebugProject1AndroidManifest.xml,C:UsersPublicDocumentsEmbarcaderoStudio17.0PlatformSDKsandroid-sdk-windowsplatformsandroid-22android.jar,.AndroidDebugProject1binProject1-unsigned.apk"

[PAClient Fehler] "paclient" exited with code 1.
Misslungen

因为它可能有帮助,所以附加信息如下:

这是我尝试嵌入的Java代码(这只是第一个概念验证测试代码):

package com.embarcadero.Mediabuttonreceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.view.KeyEvent;
import android.widget.Toast;
public class MediaButtonIntentReceiver extends BroadcastReceiver {
public MediaButtonIntentReceiver() {
    super();
}
@Override
public void onReceive(Context context, Intent intent) {
    String intentAction = intent.getAction();
    if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
        return;
    }
    KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
    if (event == null) {
        return;
    }
    int action = event.getAction();
    if (action == KeyEvent.ACTION_DOWN) {
    // do something
        Toast.makeText(context, "BUTTON PRESSED!", Toast.LENGTH_SHORT).show(); 
    }
    abortBroadcast();
}
}

这是我用来编译java代码的脚本的一个片段:

set JAVA_HOME=C:Program FilesJavajdk1.7.0_71bin
set ANDROID_PLATFORM="C:UsersPublicDocumentsEmbarcaderoStudio17.0PlatformSDKsandroid-sdk-windowsplatformsandroid-22"
"%JAVA_HOME%javac.exe" -source 1.7 -target 1.7 -verbose -Xlint:deprecation -cp %ANDROID_PLATFORM%android.jar -d "%PROJ_DIR%" %file%.java
"%JAVA_HOME%jar.exe" cvf %file%.jar %file%.class

从博客上得到有用的评论后,我发现我必须添加以下信息到AndroidManifest:

<service android:name="com.embarcadero.services.test"
         android:exported="false">
</service>

显然不是自动添加的。

最新更新