安卓逆向

安卓逆向新增View

2020-08-13  本文已影响0人  约你一起偷西瓜
简介AAPT

打包一个安卓apk除了处理代码为smali之外,还要处理资源文件
打包资源用的就是SDK的tools/目录下AAPT(Android Asset Packaging Tool)
主要作用是把资源文件编译成特定格式的二进制文件

用法参考

  1. aapt l[ist]:列出资源压缩包里的内容
  2. aapt d[ump]:查看APK包内指定的内容
  3. aapt p[ackage]:打包生成资源压缩包
  4. aapt r[emove]:从压缩包中删除指定文件
  5. aapt a[dd]:向压缩包中添加指定文件
  6. aapt v[ersion]:打印aapt的版本。
下面介绍两种动态向app里面添加View的方法
1.用代码的方式实现
    private void initViewButton() {
        Button button = new Button(this);
        button.setText("Chang");
        button.setTextColor(Color.RED);
        button.setPadding(50,50,50,50);
        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.RIGHT);
        this.addContentView(button,layoutParams);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ReqChange(v);
            }
        });
        button.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                ShowDialog(v);
                return false;
            }
        });
    }
2.用LayoutInflater获得View
    public View getAssetsLayout(Context ctx,String filename) {
        AssetManager am = ctx.getResources().getAssets();
        try {
                XmlResourceParser parser = am.openXmlResourceParser(assetsFile + filename);
                LayoutInflater inflater = (LayoutInflater) mcontext.getSystemService(mcontext.LAYOUT_INFLATER_SERVICE); 
                return inflater.inflate(parser, null);
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
    }

    //这里的xml是编译后的xml,原xml文件直接放在目录下会报错
    //这里的mDialogView里面的子View使用findViewWithTag来获得 
    mDialogView = getAssetsLayout(context,"assets/dialog_dynamic.xml")

    View viewByTag = helper.getViewByTag(assetsLayout, "UUID");

上一篇下一篇

猜你喜欢

热点阅读