mali graphics debugger在unroot的机器上运行unity

本文介绍了如何在未root的Android设备上使用Mali图形调试器(MGD)进行Unity应用的调试。前提条件包括具备Android开发环境、访问应用完整源代码、设备运行Android 4.2及以上。调试过程主要包括:将拦截器库集成到编译系统,编辑Activity加载拦截库,以及在设备上安装MGDDaemon应用。详细步骤涉及拷贝lib库、创建AndroidManifest.xml文件等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传统上,Mali图形调试器(MGD)在root的设备上工作,在这种模式下,拦截器层位于应用程序和驱动程序之间。你的应用程序调用这个拦截器层,然后拦截器把这个调用数据的一个副本发送回MGD应用程序,并将调用传递给驱动程序。

这里写图片描述
但是,这不是MGD可以使用的唯一方法。第二个选项具有第一个选项的所有功能,还有一个额外的好处,它可以在没有修改的标准Android设备上工作。 条件是你需要访问你想要分析的应用程序的完整源代码。本博客探讨了第二个选项,以便您可以在非root用户设备上调试您的应用程序。

前提条件:

  1. 电脑应该配备Android开发环境:
    安装sdk和ndk
    系统路径包含adb库;
  2. 能访问你的应用程序的完整代码;
  3. 你的设备至少运行Android 4.2.

在unity应用程序用MGD

包含3部分:
1. 将拦截器库加入你的编译系统中;
2. 编辑你的activity以加载拦截器库;
3. 在你的设备上 安装MGDDaemon应用程序。

拷贝lib库

  1. 在你的工程中创建Assets\Plugins\Android文件夹;
  2. 在mgd安装目录下找到target\android-non-root\arm[armaebi-v7a/arm64-v8a下的libMGD.so文件,拷贝到1中文件夹;
  3. 让unity的标准activity默认加载mgd拦截库。
package test.application;
import com.unity3d.player.UnityPlayerActivity;
import android.os.Bundle;
import android.util.Log;

public class StandardActivity extends UnityPlayerActivity
{
    protected void onCreate(Bundle savedInstanceState)
    {    
        try
        {
            System.loadLibrary("MGD");
        }
        catch( UnsatisfiedLinkError e)
        {
            Log.i("[ MGD ]", "libMGD.so not loaded.");
        }
        super.onCreate(savedInstanceState);
    }
}

注意java文件所在目录需要与package路径一致。如果你的package叫A.B,那么你的java文件需要放在A\B目录下,比如上述情况需要把java文件放到A\B下。
由于你需要一些来自Android的函数,你需要将Android.jar放到你的系统的类路径下,一般放在Android Sdk的platforms\android-X路径下,X是你的目标sdk版本号。由于要继承UnityPlayerActivity类,需要加入Unity的classes.jar文件,在unity安装路径下的Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Classes。如果用的java sdk大于1.6需要加入命令-source 1.6和target 1.6 ,所以命令行是:
C:\scratch>javac -cp “C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Classes\classes.jar;C:\android\sdk\platforms\android-21\android.jar” -source 1.6
-target 1.6 test\application\StandardActivity.java
如果是mac电脑:javac -cp “/Users/exampleUser/android-sdk-macosx/platforms/android-23/android.jar:/Applications/Unity/PlaybackEngines/AndroidPlayer/Variations/mono/Release/Classes/classes.jar” -source 1.6
-target 1.6 test/application/StandardActivity.java

然后需要把编译的class加入一个jar文件
jar cvf myActivity.jar test\application\StandardActivity.class。
将jar文件放入1中文件夹下。

创建AndroidManifest.xml文件

我们创建了activity类,并不代表unity会用。我们需要覆盖AndroidManifest文件。在assets/Android文件夹下创建一个AndroidManifest.xml文件,unity会自动调用。需要放在这个文件里:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <application android:icon="@drawable/app_icon" android:label="@string/app_name">
    <activity android:name="StandardActivity"
             android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
  </application>
</manifest>

android:name是你创建的activity的名字。一旦完成,你可以用平常的方式编译Android应用程序。最后注意打包时候的bundleId要和activity的包名一致。这里是test.Application。

参考:https://community.arm.com/graphics/b/blog/posts/using-mali-graphics-debugger-on-a-non-rooted-device
https://community.arm.com/graphics/b/blog/posts/building-a-unity-application-with-mali-graphics-debugger-support
https://community.arm.com/graphics/b/blog/posts/mgd-integration-in-unity

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿拉平平的小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值