美文网首页安卓逆向
安卓逆向新增View

安卓逆向新增View

作者: 约你一起偷西瓜 | 来源:发表于2020-08-13 17:43 被阅读0次
    简介AAPT

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

    • "assets"和"res/raw"目录下的所有资源进行打包,可压缩,不生成资源ID
    • 对assets资源之外所有的资源赋予一个资源ID常量,并且会生成一个资源索引表resources.arsc
    • 编译AndroidManifest.xml成二进制的XML文件
    • 把上面3个步骤中生成结果保存在一个“.ap_”文件,并把各个资源ID常量定义在一个R.java中

    用法参考

    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");
    
    

    相关文章

      网友评论

        本文标题:安卓逆向新增View

        本文链接:https://www.haomeiwen.com/subject/okcidktx.html