【AndroidStudio】 导入classes.jar, 找不到自定义服务的问题

classes.jar在AOSP中的路径:

    out/target/common/obj/JAVA_LIBRARY/framework_intermediates/classes.jar


    
导入AS步骤:
    1.将源码编译的classes.jar复制到app中的app\libs\目录下

    2.右键classes.jar,选择【add as Library...】

    

 

3. 改为compileOnly

4. 检查下这个路径

 

5.app.iml中配置一下顺序,我这里是把Android API 30 Platform改到了最后一行,也就是classes.jar后面

 

这样就可以找到了,没暴红了~

 

遇到一个问题:

    manager里面构造函数的service是空指针。

 

看了半天,有好几个问题

1.先把这个selinux权限加一下

 

//device

service.te
    
    type chao_service, app_api_service, system_server_service, service_manager_type;

service_contexts:   
    
    chao_service u:object_r:chao_service:s0 

system_server.te:

    allow system_servcer chao_service:service_manager add;

    
2.manager里面的构造函数,service是空指针原因是IchaoService注册的问题,某个原因没有注册成功。
三个地方,里面有其他服务注册的方法。

照着超,自己的服务名字对上就没问题

这个问题解决后,app启动后onCreate中:

    1.获得service对象
    chaoManager = (ChaoManager) getSystemService(Context.CHAO_SERVICE);

    2.manager中的构造函数执行,从stub传来service

    3.service就不为空了

 

这个时候,我又遇到一个问题:

    在jni中的ionctl函数执行了,但是kernel层的对应的ioctl函数内没有执行


。。
。。。
。。。。

想了一会儿,然后打个log。


是因为hal(hardware)层的open函数里面的问题。

hal层里面的module的open函数一般做的事情是:

        fd = open("/dev/chaogpio", O_RDWR);


也就是获得设备节点的文件句柄。


然后发现这个fd<0。。。。

按道理在机器开机启动时候,会执行hal里面得gpio_device->gpio_open(gpio_device), 也就是上面的
    fd =  fd = open("/dev/chaogpio", O_RDWR);

后面再在app里面操作ioctl逻辑那应该有了句柄啊 ??

机器启动的时候抓的logcat, 也没看到报错,只是顺序执行了

???

 

后面想了下发现了,要加节点权限

    /dev/chaogpio的执行权限,如果boot启动的时候没有权限,那么在logcat执行的时候,也就是android起来的时候,是获得不到句柄的。

 

节点添加位置:
            init.target.rc            //device

on boot
    chmod 777 /dev/chaogpio
    chown system system /dev/chaogpio
这样,从app到driver写了一变,碰到几个问题,现在对流程相对清楚了很多。



-------------
end ~

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值