吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2914|回复: 15
收起左侧

[Android 原创] 反射获取Java层字段的值

[复制链接]
宸道移动安全 发表于 2020-10-30 15:46
一:新建activity_login布局文件,编写布局代码


1.打开eclipse工具,找到文章分享里面创建好的“xxx”工程,在工程中找到“res”目录,右键选择“New”选项下的“Android XML File”,弹出一个创建布局文件的对话框,填写布局文件名称为“activity_login”,选择布局文件类型为“LinearLayout”,然后点击Finish完成布局文件的创建,如下图所示。

图片1.png

2.编写布局xml文件的代码,分为两个步骤进行操作:
第一步:在根LinearLayout(线性布局)标签中添加属性       
android:gravity="center_vertical",使其内容竖向居中。
第二步:将之前编写的登录界面的代码复制到该文件中。       

图片2.png
图片3.png

3.布局代码编写完成后,切换到预览界面,如下图所示。

图片4.png

二:新建LoginActivity类


1.在“XXX”工程中找到src目录下的包名为comXXX的文件并选中,右键选择“New”下的“Class”,弹出新建类的对话框,在对话框中填写类名为LoginActivity后,点击Finish完成LoginActivity类的创建,如下图所示。

图片5.png

2.LoginActivity类创建完成后,开始编写Java代码,如下图所示。
- 第一步:加载布局界面。     第二步:声明成员变量。
- 第三步:初始化控件,在始化控件之前需要先定义相关成员变量。      
- 第四步:设置按钮监听事件。 第五步:获取编辑框内容。   
- 第六步:定义native方法。
- 第七步:调用native方法,判断用户输入的账号和密码是否正确。
- 第八步:如果输入的账号和密码正确,则跳转到MainActivity界面。

图片6.png

三:修改AndroidManifest.xml文件


在“XXX”工程中找到“AndroidManifest.xml”文件,修改程序入口界面为“LoginActivity”,再添加一个活动组件“MainActivity”,如下图所示。

图片7.png


四: 生成.h文件


在“yijindaxue”工程下选中src目录右键选择最后一项,properties,点击该选项弹出弹窗,复制Location对应的值,也就是文件的路径D:\Android \data\yijindaxue\src,复制成功后关闭对话框,如下图所示。

图片8.png

点击左下角“windows”图标,输入“cmd”命令打开窗口,输入“D:”切换到D盘,然后执行命令“cd D:\Android\data\yijindaxue\src”,进入src目录,紧接着执行命令“javah -jni com.XXX.LoginActivity”生成“.h”头文件,如下图所示。

图片9.png

返回“XXX”工程界面,选中src目录,右键F5刷新,看到一个com_XXX_MainActivity.h文件,将该文件移动至jni文件夹中,然后双击打开该文件,如下图所示。

图片10.png

五:编写C代码


在“XXX”工程中找到“jni”目录下的“XXX,c”文件,双击打开该文件,编写相应的C代码。

使用“#include”命令导入之前生成的头文件,然后将头文件中的函数复制粘贴至下图方框位置,删除“;”,并添加{},在对应的类型后面添加两个变量名env和obj,如下图所示。

图片11.png

编写C代码,反射获取Java层字段的值,如下图所示。
1.调用FindClass函数获取对应的类。
2.获取Java层实例字段的值:                  
- 第一步:调用GetFieldID函数获取Java层实例字段的ID。
- 第二步:调用GetObjectField函数获取Java层实例字段的值。
- 第三步:调用GetStringUTFChars函数将jstring类型转换为char*类型。

3.获取Java层静态字段的值:
- 第一步:调用GetStaticFieldID函数获取Java层静态字段的ID。
- 第二步:调用GetStaticObjectField函数获取Java层实例字段的值。
- 第三步:调用GetStringUTFChars函数将jstring类型转换为char*类型。

4.调用strcmp函数来比较用户输入的账号和密码是否正确。

图片12.png


六:编译动态链接库


在“xxx”工程下选中jni目录,右键选择“properties”,点击该选项弹出弹窗,复制“Location”对应的值,也就是文件路径D:\ Android\data\xxx\jni,复制成功后关闭对话框,如下图所示。

图片13.png

点击左下角“windows”图标,输入“cmd”命令打开窗口,输入“D:”切换至D盘,然后执行命令“cd D:\Android\data\xxx\jni”进入jni目录,紧接着执行“ndk-build”命令生成动态链接库“.so”文件,如下图所示。

图片14.png

七:修改so库加载位置


由于在调用native方法之前,要先加载so库,否则程序会崩溃,所以要将so库的位置进行修改,将MainActivity.java文件中的so库加载代码剪切至LoginActivity. java文件中,如下图所示。

图片15.png

八:运行应用程序


打开雷电模拟器,运行应用程序:选中“xxx”工程=>右键选择Run As选项=> 点击Android Application。

运行该程序后,当输入正确的账号和密码,会弹出弹窗提示登录成功,并且跳转到了主页面。

小结:


登录功能实现流程完成:

  1、新建activity_login布局文件,编写代码是登录界面。
  
  2、新建LoginActivity类,编写Java层登录逻辑。

第一步:加载布局界面。     
第二步:声明成员变量。
第三步:初始化控件。      
第四步 :设置按钮监听事件。
第五:获取编辑框内容。   
第六步:定义native方法。
第七步:调用native方法,判断用户输入的账号和密码是 否正确。
第八步:如果输入的账号和密码正确,则跳转MainActivity界面。

3、修改AndroidManifest.xml文件。

4、执行javah命令生成.h头文件,并将头文件移到jni文件夹。  

5、编写C代码,获取Java层字段的值。
第一步:使用#include导入头文件。
第二步:编写C代码获取Java层实例字段的值。
第三步:编写C代码获取Java层静态字段的值。
第四步:判断用户输入的账号和密码是否正确。

6、使用NDK工具编译.c文件生成动态链接库.so文件。

7、修改so库加载位置。

8、运行应用程序。


免费评分

参与人数 4吾爱币 +12 热心值 +3 收起 理由
qtfreet00 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
莫利花 + 1 + 1 我很赞同!
GGbond + 1 我很赞同!
windy_ll + 3 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

windy_ll 发表于 2020-10-30 17:01
改换成as了
Liture 发表于 2020-10-30 17:44
wangyuan0558 发表于 2020-10-30 20:39
wyb1109_2008 发表于 2020-10-31 10:08
这个厉害,回头试一试。
gfslys 发表于 2020-10-31 16:16
学习了,谢谢分享
iuw 发表于 2020-10-31 19:20
这个目的是做啥的?没看懂。
弗由 发表于 2020-11-1 21:22
学习了,感谢!
fcguo800 发表于 2020-11-4 11:24
大佬威武啊,好好学习一下,感谢分享。
bruce1202 发表于 2020-11-10 15:02
学习了,谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 03:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表