aidl远程服务调用Android,报错:Process 'command 'F:\Android\SDK\build-tools\29.0.0\aidl.exe''
aidl远程服务调用Android
demo1:
Alipay 支付App服务:
1.新建: Alipay\app\src\main\aidl\com\glsite\alipay\IAlipayService.aidl
// IAlipayService.aidl
package com.glsite.alipay;// Declare any non-default types here with import statementsinterface IAlipayService {// 调用支付的远程接口int callSafePay(String username, String password, float money, long timestamp);
}
1.1
main下新建:aidl
1.2
新建包:com.glsite.alipay 与java文件中包名一致
1.3
新建远程服务类
1.4 构建
1.4.1 构建报错:
Process 'command 'F:\Android\SDK\build-tools\29.0.0\aidl.exe'' finished with non-zero exit value -1073741819
不要用29.0.0 这是谷歌挖的坑,直接注释或改成 28.0.3;
解决:
app\build.gradle
注释这一行:
或 修改版本:
1.4.2 重新构建
2.Alipay\app\src\main\java\com\glsite\alipay\
AlipayService
package com.glsite.alipay;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;public class AlipayService extends Service {public AlipayService() {}private class MyBinder extends IAlipayService.Stub {@Overridepublic int callSafePay(String username, String password, float money, long timestamp) throws RemoteException {return safePay(username, password, money, timestamp);}}@Overridepublic IBinder onBind(Intent intent) {// TODO: Return the communication channel to the service.return new MyBinder();}@Overridepublic void onCreate() {System.out.println("onCreate");super.onCreate();}@Overridepublic void onDestroy() {System.out.println("onDestroy");super.onDestroy();}/*** 安全支付的服务方法** @param username* 用户名* @param password* 密码* @param money* 钱* @param timestamp* 时间戳* @return 结果码*/public int safePay(String username, String password, float money, long timestamp) {System.out.println("加密的username");System.out.println("加密的password");System.out.println("提交数据到支付宝的服务器");if (money > 5000) {return 505;// 支付超过了当日限额}if ("zhangsan".equals(username) && "123".equals(password)) {return 200;} else {return 300;}}
}
3.Alipay\app\src\main\java\com\glsite\alipay\
MainActivity
package com.glsite.alipay;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
}
4.AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.glsite.alipay"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><serviceandroid:name=".AlipayService"android:enabled="true"android:exported="true"><intent-filter><action android:name="com.glsite.alipay"/></intent-filter></service><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
demo2:
Fish
调取service的服务:
1.
需要第一个demo的整个IAlipayService.aidl文件包括文件夹路径,直接拷贝过来 Alipay\app\src\main\aidl\com\glsite\alipay\IAlipayService.aidl
aidl\com\glsite\alipay\IAlipayService.aidl 拷贝;
2.MainActivity
package com.glsite.fish;import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;import com.glsite.alipay.IAlipayService;public class MainActivity extends AppCompatActivity {private IAlipayService mIService;private MyConn mConn = null;private class MyConn implements ServiceConnection {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {System.out.println("成功绑定到远程alipay服务上");mIService = IAlipayService.Stub.asInterface(service);}@Overridepublic void onServiceDisconnected(ComponentName name) {}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent = new Intent();intent.setAction("com.glsite.alipay");// 远程调用服务在安卓8.0系统及以上,也需要指定组件名,也就是显式调用intent.setComponent(new ComponentName("com.glsite.alipay", "com.glsite.alipay.AlipayService"));mConn = new MyConn();// 不要忘记newbindService(intent, mConn, BIND_AUTO_CREATE);}/*** 调用远程服务的方法,支付2元* @param view*/public void click(View view) {try {int resultCode = mIService.callSafePay("zhangsan", "123", 8000.00f, System.currentTimeMillis());switch (resultCode) {case 200:Toast.makeText(this,"支付成功", Toast.LENGTH_SHORT).show();break;case 404:Toast.makeText(this,"银行卡余额不足", Toast.LENGTH_SHORT).show();break;case 300:Toast.makeText(this,"用户名或密码错误", Toast.LENGTH_SHORT).show();break;case 505:Toast.makeText(this,"超过今日限额", Toast.LENGTH_SHORT).show();break;default:break;}} catch (RemoteException e) {e.printStackTrace();}}
}
4.AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.glsite.fish"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
aidl远程服务调用Android,报错:Process 'command 'F:\Android\SDK\build-tools\29.0.0\aidl.exe''相关推荐
- android sdk platform-tools 19.0.1,如何强制Android Studio 0.6.0使用SDK Build Tools 19.1.0
我刚刚更新我的Android Studio到0.6.0,并更新SDK Build Tools到19.1.0,但我得到这个错误: The SDK Build Tools revision (19.0.3 ...
- 【错误记录】Flutter / Android 报错 ( AAPT: error: attribute android:requestLegacyExternalStorage not found )
文章目录 一. 报错信息 二. 问题分析 三. 解决方案 一. 报错信息 Flutter 使用 image_picker 时 , 需要进行 AndroidX 兼容 , 设置了 Android 编译 S ...
- linux android build tools,build.gradle 文件中的 Android SDK Build Tools version
build.gradle 文件中的 Android SDK Build Tools version Android,Gradle,SDK 2018.07.17 在 Android Gradle Plu ...
- stata15无法识别调用plus外部命令,报错:command XXX is unrecognized如何解决?
stata15无法识别调用plus外部命令,报错:command XXX is unrecognized 如何解决? 解决办法: 查看stata文件夹下是否有profile.do文件: 如果有,可能是 ...
- java exec执行tar_用java调用rpmbuild 报错,同一条命令直接复制到终端却能运行
用java调用rpmbuild 报错,同一条命令直接复制到终端却能运行. 命令如下: rpmbuild --define "_topdir /var/lib/jenkins/workspac ...
- python调用dll报错:ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong call
python调用dll报错:ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong call ...
- Android报错——connect failed: EHOSTUNREACH (No route to host)
2019独角兽企业重金招聘Python工程师标准>>> Android报错--connect failed: EHOSTUNREACH (No route to host) 没有路由 ...
- 调用torchtext报错OSError: libtorch_cpu.so: cannot open shared object file: No such file or directory
环境 torch版本1.4.0 报错 报错信息如题.调用torchtext报错 OSError: libtorch_cpu.so: cannot open shared object file: No ...
- c#调用excel报错 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))问题的解决
c#调用excel报错 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))问题的解决 参考文章: (1)c#调用excel报错 (异常来自 HRESULT:0x ...
最新文章
- 漫谈云计算、虚拟化、容器化--云平台技术栈05
- gitlab数据迁移
- hyper-v创建虚拟服务器,使用 Hyper-V 创建虚拟机
- poj 2247 Humble Numbers
- 在pytorch中自定义dataset读取数据2021-1-8学习笔记
- 补作业:随机生成二元四则运算
- java流与文件——正则表达式
- 【C语言进阶深度学习记录】三十六 程序与进程的区别(程序的内存布局)
- “数说”——数据的三重身份
- 监督学习 | 集成学习 之AdaBoost、梯度提升及Slearn实现
- 交换机命令行配置与VLAN
- 分享Qt的面试题目(或许未来的我能用的上呢)_vortex_新浪博客
- rocketmq源码调试
- 风格迁移篇----艺术风格转换的内容与风格解构
- softmax 激活函数
- android国家代码/国际电话区号选择器
- 负反馈放大器电路详解
- 还在为产品的客户服务而烦恼?来搭建在线客服中心!
- 隆重推荐几本幼儿教育的书籍
- 用c语言,制作一个心形彩色告白图案(附源码)