修改smali文件,重打包,实现调用第三方SO文件

本文介绍如何在Java中加载SO文件并调用其内部的本地方法。具体包括使用System.loadLibrary加载SO库,通过Java声明本地方法,并在Smali代码中实现对应的调用过程。

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

Java代码:

static{
        // //loadlibary里 要把SO文件名的lib和后缀去掉。libfgma.so --> fgma
        System.loadLibrary("fgma"); 
    }

对应Smali:

# direct methods
.method static constructor <clinit>()V
    .locals 1

    .prologue
    .line 15
    const-string v0, "fgma"
    invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V

    .line 16
    return-void
.end method

 

对so中函数的声明:

public native String GetLocalPort();

对应Smali:

# virtual methods
.method public native GetLocalPort()Ljava/lang/String;
.end method

 

调用:

String str = GetLocalPort();
Toast.makeText(this, str, Toast.LENGTH_LONG).show();    

对应Smali:

.line 23
 invoke-virtual {p0}, Lcom/dit/mobile/android/fgma3/Mary;->GetLocalPort()Ljava/lang/String;
 move-result-object v0

 .line 25
 .local v0, "str":Ljava/lang/String;
 const/4 v1, 0x1

 invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
 move-result-object v1
 invoke-virtual {v1}, Landroid/widget/Toast;->show()V

 

转载于:https://www.cnblogs.com/xunbu7/p/4342316.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值