Android11 应用中自定义服务实例化对象为null

应用获取自定义服务实例化对象为null


记录一下之前遇到的问题修改成功后,再次遇到忘记怎么改了。

app的libs下正常引入jar

classes.jar下是已经自定义服务的几个Manager,在AS里面也正常引入编译,配置build.gradle:
在这里插入图片描述
在MainActivity里面将自定义服务(DiagnosticManager )实例化:

package com.battmon.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.information.diagnostic.DiagnosticManager;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private static final String TAG = "MainActivity";

    private Button btn1;
    private ActivityManager activityManager;
    private DiagnosticManager diagnosticManager;
    private DiagnosticManager.EthernetStatusChangeListener changeListener = new DiagnosticManager.EthernetStatusChangeListener() {
        @Override
        public void onAvailabilityChanged(String s, boolean b) {
            Log.d(TAG, "onAvailabilityChanged: " + s + " avail : " + b);
        }
    };

    @SuppressLint("WrongConstant")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn1 = findViewById(R.id.btn_1);
        btn1.setOnClickListener(this);

        activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
        diagnosticManager = (DiagnosticManager) this.getSystemService("diagnostic");
        Log.d(TAG, "onCreate: " + diagnosticManager);
        Log.d(TAG, "onCreate: " + activityManager);
        if (diagnosticManager != null) {
            diagnosticManager.addListener(changeListener);
        }

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_1:
                diagnosticManager.getChargeStatus();
                break;
        }
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (changeListener != null) {
            diagnosticManager.removeListener(changeListener);
        }
    }

}

实例化对象为null

打印实例化对象log显示:

2022-08-22 14:09:34.705 9423-9423/com.battmon.myapplication D/MainActivity: onCreate: null
2022-08-22 14:09:34.706 9423-9423/com.battmon.myapplication D/MainActivity: onCreate: android.app.ActivityManager@12c87fd
2022-08-22 14:09:34.706 9423-9423/com.battmon.myapplication 
2022-08-22 14:09:34.742 9423-9423/com.battmon.myapplication D/ViewRootImpl[MainActivity]: hardware acceleration = true , fakeHwAccelerated = false, sRendererDisabled = false, forceHwAccelerated = false, sSystemRendererDisabled = false
2022-08-22 14:09:34.756 9423-9423/com.battmon.myapplication V/PhoneWindow: DecorView setVisiblity: visibility = 0, Parent = android.view.ViewRootImpl@e4a23bb, this = DecorView@a1660d8[MainActivity]
2022-08-22 14:09:34.770 9423-9423/com.battmon.myapplication V/PhoneWindow: DecorView setVisiblity: visibility = 4, Parent = android.view.ViewRootImpl@e4a23bb, this = DecorView@a1660d8[MainActivity]

***在检查自己定义的服务没有问题之后,认为是在编译时,jar下的类没有编译进去,在网上查了一遍之后jar的引用没有问题,此时,在另外一个窗口看到系统log信息,因为只查看当前应用的log所以将其他log过滤了,log显示:

2022-08-22 14:09:34.485 9423-9423/com.battmon.myapplication W/n.myapplicatio: Accessing hidden method Lcom/information/diagnostic/DiagnosticManager;->getEthernetStatus()Z (blacklist, linking, denied)
2022-08-22 14:09:34.485 9423-9423/com.battmon.myapplication W/n.myapplicatio: Accessing hidden method Lcom/information/diagnostic/DiagnosticManager;->getChargeStatus()I (blacklist, linking, denied)
2022-08-22 14:09:34.705 353-353/? E/SELinux: avc:  denied  { find } for pid=9423 uid=10133 name=diagnostic scontext=u:r:untrusted_app:s0:c133,c256,c512,c768 tcontext=u:object_r:diagnostic_service:s0 tclass=service_manager permissive=0
2022-08-22 14:09:34.705 9423-9423/com.battmon.myapplication W/SystemServiceRegistry: No service published for: diagnostic
2022-08-22 14:09:34.705 9423-9423/com.battmon.myapplication D/MainActivity: onCreate: null
2022-08-22 14:09:34.706 9423-9423/com.battmon.myapplication D/MainActivity: onCreate: android.app.ActivityManager@12c87fd
2022-08-22 14:09:34.706 9423-9423/com.battmon.myapplication D/MainActivity: onCreate: null

这不就熟悉起来了,log显示当前应用为黑名单应用,拒绝访问,第三行显示缺少SELinux权限,那么到对应的untrusted_app加上find权限不就ok了。
修改device/mediatek/sepolicy/bsp/plat_private/untrusted_app.te文件,给我自定义的diagnostic_service添加find权限

allow untrusted_app diagnostic_service:service_manager find;

测试结果:

2022-08-22 14:54:10.566 5757-5757/com.battmon.myapplication D/MainActivity: onCreate: com.information.diagnostic.DiagnosticManager@66a9583
2022-08-22 14:54:10.567 5757-5757/com.battmon.myapplication D/MainActivity: onCreate: android.app.ActivityManager@b41c300
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值