smali 添加资源

1.添加一个文本“hai ,I am smali !”

1.修改res\layout目录想的Activity添加TextView
2.如果TextView没有指定id,那么可以忽略后面操作,直接封包即可。我们指定id=id_text
3.修改res\values目录下的public.xml,添加id,注意id不能重复
	    <public type="id" name="id_text" id="0x7f010001" />
4.修改res\values目录下的ids.xml,添加id(均为false,此步骤不添加测试也没发现问题)
	        <item type="id" name="id_text">false</item>
5.修改smali目录下R$id.xml,添加id(id值和public.xml一致)
		.field public static final id_text:I = 0x7f010001
6.封包测试

以上步骤为了更加明确,使用beyond compare比较查看一下:

在这里插入图片描述
效果:
在这里插入图片描述

2.添加新的Activity,eg:PageActivity

1.res\layout目录添加PageActivity的布局文件:activity_page.xml
2.修改res\values目录下的public.xml,添加id,注意id不能重复
	        <public type="layout" name="activity_page" id="0x7f020001" />
3.修改smali目录下R$layout.xml,添加id(id值和public.xml一致)
		.field public static final activity_page:I = 0x7f020001
4.将PageActivity的smali文件拷贝过来
5.封包测试

在这里插入图片描述

此时我们只是添加了资源,还没有增加调用过程。为了尽可能少的编写smali文件,我们建议将调用过程封装到一个外部函数里面。例如我们将调用过程封装到MyToast的Show里面:

public class MyToast {
    static public void show(Context ctx){
        ctx.startActivity(new Intent(ctx,AdActivity.class));
    }
}

//外部调用
//MyToast.show(cxt)即可,demo里面我们将调用过程放在按钮事件里面,对应的smali代码
1.新增了MyToast文件,所以会生成一个MyToast.smali文件(直接拷贝)
2.调用MyToast.show的smali文件中增加调用的show的smali代码
	    iget-object p1, p0, Lcom/xxx/yyy/AdActivity$1;->this$0:Lcom/xxx/yyy/AdActivity;
    	invoke-static {p1}, Lcom/xxx/yyy/MyToast;->show(Landroid/content/Context;)V

在这里插入图片描述

3.添加第三方aar,eg:233广告SDK
sdk地址:https://dev.233leyuan.com/#/doc/adv_doc_1_outside,sdk如果添加就不讲解了,请自行百度。

1.导入sdk的smali文件,位置在smali\com下面
2.因为上述封装了MyToast,所以直接修改MyToast的实现,然后将MyToast.smali文件拷贝过来就行

因为上述aar不涉及资源,所以融合很简单,如果涉及一些资源就的联合上述1,2进行资源整合了。

为了尽可能的小的改动,我们将MyToast中的show函数修改成为调用广告sdk的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值