我是Android编程新手。任务如下:
从 Android 应用程序 (apk) 远程连接到 SAP 并调用 BAPI。通过 Web 服务调用的选项不合适 - 安全系统不允许。
我需要使用以下方式连接 SAPSAP路由器。
系统:
1) Windows 8.1 - 64 位
2)Java 1.8.0_201-64 位
3)Android Studio-64位
4)SAP JCO 库Windows 32 位(https://support.sap.com/en/product/connectors/jco.html)
在 Android Studio 中: - 创建一个活动并创建一个按钮。 - 单击按钮时,该方法尝试连接到 SAP。
代码如下:
Properties connectProperties = new Properties ();
connectProperties.setProperty (DestinationDataProvider.JCO_ASHOST, "xx.xx.xx.xx");
connectProperties.setProperty (DestinationDataProvider.JCO_SYSNR, "00");
connectProperties.setProperty (DestinationDataProvider.JCO_CLIENT, "200");
connectProperties.setProperty (DestinationDataProvider.JCO_USER, "USER_NAME");
connectProperties.setProperty (DestinationDataProvider.JCO_PASSWD, "USER_PASS");
connectProperties.setProperty (DestinationDataProvider.JCO_LANG, "EN");
connectProperties.setProperty (DestinationDataProvider.JCO_SAPROUTER, "/H/xxx.xxx.xxx.xxx...");
String f_name = createDestinationDataFile (context, DESTINATION_NAME1, connectProperties);
try {
JCoDestination jcoDestination = JCoDestinationManager.getDestination (DESTINATION_NAME1);
JCoFunction function = jcoDestination.getRepository().GetFunction ("ZGET_ANLA");
if (function == null) throw new RuntimeException ("ZGET_ANLA not found in SAP.");
System.out.println ("ok");
} catch (JCoException e) {
e.printStackTrace ();
}
static String createDestinationDataFile (Context context, String destinationName, Properties connectProperties)
{
PackageManager m = context.getPackageManager ();
String str = context.getPackageName ();
try {
PackageInfo p = m.getPackageInfo (str, 0);
str = p.applicationInfo.dataDir;
} catch (PackageManager.NameNotFoundException e) {
Log.w ("your tag", "Error Package name not found", e);
}
System.setProperty ("jco.destinations.dir", str);
String f_name = String.valueOf (str + "/" + destinationName);
File destCfg = new File (str + "/" + destinationName + ". JcoDestination");
try
{
FileOutputStream fos = new FileOutputStream (destCfg, false);
connectProperties.store (fos, "for tests only!");
fos.close ();
}
catch (Exception e)
{
throw new RuntimeException ("Unable to create the destination files", e);
}
return f_name;
}
在程序执行时,在字符串:
JCoDestination jcoDestination = JCoDestinationManager.getDestination (DESTINATION_NAME1);
我收到错误 ->”库“libdl.so.2”未找到
E / AndroidRuntime: FATAL EXCEPTION: main
Process: com.z_fi.zinv_fa, PID: 8455
java.lang.ExceptionInInitializerError: JCo initialization failed with java.lang.UnsatisfiedLinkError: dlopen failed: library "libdl.so.2" not found
但是该库libdl.so.2
未包含在 SAP JCO 档案中。(我尝试libdl.so.2
在 Linux 档案中找到了该文件。但程序请求下一个文件 libdl.so。3等无限期)
问题:
我究竟做错了什么?
我应该下载哪个版本的 SAP JCO - Linux 版还是 Windows 版?32 位还是 64 位?
我需要在哪里导入 SAP JCO 档案的文件?在项目结构中还是在设备文件资源管理器中 (c:\Users***\Documents\AndroidStudio**DeviceExplorer**)?
使用 SAP JCO 时需要在 SAP 服务器上进行设置吗?我无法在操作系统级别访问 SAP 服务器...
或许,也许有另一种选择可以从 Android 应用程序连接到 SAP?
答案1
从您提供的链接 4)您必须安装 32 位版本的 Java