1. TextView
控件id -> 在代码中方便的获取控件
控件内容、控件大小(常用单位dp)、字体、字体颜色、字号(常用单位sp)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("MainActivity onCreate 333");
System.out.println(MyApplication.mInfoMap.get("name"));
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
// R 文件在当前不存在 编译后产生
setContentView(R.layout.activity_main);
// R.id.sample_text 对应app->main->res-> layout->activity_main.xml中TextView的id
TextView tv = findViewById(R.id.sample_text);
tv.setText("hengdi");
// Example of a call to a native method
// TextView tv = binding.sampleText;
// tv.setText(stringFromJNI());
}
2. strings.xml
<string name="Hello">Hello World!</string>
在开发中,一般字符串会写在app->main->res-> values ->strings.xml 这个文件中,然后代码中引用文件中的字符串
应用:
strings.xml
<resources> <string name="app_name">Hookdemo</string> <string name="str_name">welcome hengdi</string> <string name="Hello">Hello</string> </resources>
在activity_main.xml 的 android:text 中调用
<TextView android:id="@+id/sample_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/str_name" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" />
在MainActivity.java中直接调用strings.xml 中的str_name
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); System.out.println("MainActivity onCreate 333"); System.out.println(MyApplication.mInfoMap.get("name")); binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); // R 文件在当前不存在 编译后产生 setContentView(R.layout.activity_main); // TextView tv = findViewById(R.id.sample_text); tv.setText(R.string.str_name); // setContentView(R.layout.activity_main); // // TextView tv = findViewById(R.id.sample_text); // tv.setText(.str_name); //tv.setText(R.layout.); // Example of a call to a native method // TextView tv = binding.sampleText; // tv.setText(stringFromJNI()); }
此时运行,打开jadx。反编译刚刚的apk。
- 在路径:
资源文件-> res-> layout -> activity_main.xml 中可以看到android:text="@string/Hello" 。 是和我们源代码一样的。 - 在 resources.arsc -> res -> values -> strings.xml 中可以找到和我们源码strings.xml 中一致的几个值。
在 MainActivity.java中,
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); System.out.println("MainActivity onCreate 333"); System.out.println(MyApplication.mInfoMap.get("name")); ActivityMainBinding inflate = ActivityMainBinding.inflate(getLayoutInflater()); this.binding = inflate; setContentView(inflate.getRoot()); setContentView(R.layout.activity_main); ((TextView) findViewById(R.id.sample_text)).setText(R.string.str_name); } 按住ctrl,点击R.string.str_name,跳转后,如下,这个情况下,我们无法知道str_name的实际值是什么。这种为硬编码 public static final int str_name = 2131624037;
在jeb中,setText(0x7FE80104)的值直接就是一个硬编码,打开resouces -> values ->public.xml。 搜索这个硬编码的值,可以找到对应如下内容:
<public id="0x7FE80104" name="str_name" type="string">
因为是string 类型,因此可以在strings.xml搜索 str_name 中找到。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。