• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
核桃仁ht
帮助1


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

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfggki
系列文章
更多 icon
同类精品
更多 icon
继续加载