在使用EasyPoi导出Excel的时候,数字是文本格式。不能直接使用Excel的sum函数。需要手动转换成数字。 解决方案: 在对应字段的Excel注解中添加type=10。就可以了。...使用的版本是:4.3.0。
其中executable表示可执行版,需要安装后使用。embeddable表示嵌入版,就是解压以后就可以使用的版本。推荐使用executable可执行版本,一直默认即可。...— 需要解包的apk路径, 例如C:\1.apk -f —— 强制覆盖,若outputDir路径已经存在,会清空outputDir指向的文件夹内的所有内容 -o —— 指定输出目录为紧跟在-o后的路径...2)输入控件 Line Edit:单行文本框,输入单行字符串。 控件使用Text() 返回文本框内容。setText() 设置文本框显示内容。...ToolButtonTextBesideIcon 文字显示在图标的旁边。 ToolButtonTextUnderIcon 文本显示在图标下边。...3、创建反编译界面 1)、 通过双击菜单栏的Type Here可以添加一级菜单。点击一级菜单中的+号,可以添加二级菜单。
可以 在 Activity / Fragment / Dialog 中获取组件 , 在 Xml 布局文件中 设置点击事件 , 设置文本 , 设置可见性 等等 ; 二、ViewBinding ViewBinding...是 2019 年 Android Studio 3.6 版本 开始使用的 , 其作用是 为 Xml 布局文件 生成绑定类 , 借助该 绑定类 , 可以 快速获取 Xml 中的组件 ; ViewBinding...可以代替的代码逻辑 : findViewById 定义 View 组件的成员字段 ViewBinding 与 ButterKnife 功能基本一致 , 编译性能优于 ButterKnife , 因为...ButterKnife 中使用了大量的注解 , 其编译速度要低于 ViewBinding ; ViewBinding 与 DataBinding 比较 , ViewBinding 是一个量级较轻的函数库...; 集成 DataBinding 要比 ViewBinding 编译速度慢很多 ; 集成 DataBinding 编译后的 Apk 要比 ViewBinding 大几十 KB ; 如果只是想要省略 findViewById
解决方案:如果在某个地方需要同时执行多个异步任务,强烈建议使用线程池; 数据库升级中的坑: 问题现象:在数据库的某个表中增加/修改了某个字段后,程序在运行时崩溃掉了;或者在增加字段时修改了数据库的版本号...程序在未启动的情况下,静态注册的广播无法收到消息: 问题现象:程序添加了对开机广播的监听,但无法接收到; 原因分析:这个问题只有在程序安装但没有启动时才会出现,只要程序启动过一次后就不会有这个问题。...(int value)的传值有问题,在xml文件中没有找到id对应的字符串; 解决方案:给TextView设置文本的时候一定要转成String或者Charsequence类型,避免TextView将setText...通过反射访问方法和字段的效率大不一样: 问题现象:程序运行卡、慢; 原因分析:在一个循环中使用到了反射,并且是调用的反射方法,改成反射字段后,卡、慢的现象得到明显的改善; 解决方案:通过反射修改或者获取类中的某个属性时...但需要谨慎使用这两个属性,否则可能会导致编译生成的APK特别大(解压生成后的APK发现,对于有问题的图片,每个drawable文件夹下都会拷贝一份); 解决方案:去掉属性设置,解决编译问题。
APT的基本原理 APT的基本原理是在编译期间扫描和处理源代码中的注解,然后根据注解生成相应的Java代码。这些生成的代码可以在编译后被编译器包含到最终的APK中。...生成代码: 接着,根据注解中的信息,APT会生成相应的Java代码。 编译代码: 最后,生成的Java代码会被编译器编译成.class文件,与其他源代码一起构建成APK。...RetentionPolicy.CLASS: 注解保留在编译后的class文件中,但在运行时会被忽略,默认值。在Kotlin中对应的是BINARY。...RetentionPolicy.RUNTIME: 注解保留在编译后的class文件中,并且在运行时可以通过反射获取到。...中,我们使用了@BindView注解来标记TextView字段,然后在onCreate方法中调用Butterknife.bind(this)方法,即可自动为textView字段进行赋值,无需手动调用findViewById
概述 Toast与对话框类似,也会在屏幕的某个位置弹出一个窗口,在窗口中可以显示文本、图片等信息 与对话框不同的是,Toast信息提示框不可获得焦点,而且在显示一定的时间后会自动关闭。...由于Toast没有按钮,也无法通过手机按键关闭Toast,所以只能通过显示时间的长短来控制Toast信息提示的时间自动关闭。...注意:在创建只显示文本的Toast对象时,建议使用Toast.makeText方法,而不要直接new Toast对象,虽然Toast类有setText方法,但是不能在使用new关键字创建Toast对象后设置...一下代码会抛出异常 Toast toast = new Toast(); toast.setText("文字");// 此行代码会抛出异常 toast.show(); 显示文本和图像的Toast- setView...center" android:layout_margin="10dp" /> LinearLayout> 如果同时多个Toast信息提示框,系统会将这些Toast信息提示框放到队列中,
NDK在编译的时候,会自动编译多个不同CPU需要的动态链接库。并都打包在最终的APK文件中。 在不同的Android系统安装的时候,会自动选择正确的CPU类型安装其中一种。...常量字符串虽然简便,但无法完成多国语言自动切换等基本功能,在正式的项目中应当避免这样使用。...[second_run1.png] 点击CALLJNI按钮后,文本框显示的信息表示JNI正常执行了。...在当前的Android版本中,在APK程序中内嵌可执行文件,需要通过以下几个步骤: 在NDK中编译对应的源代码。...或者在其它语言环境中,使用对应工具,生成在Android环境可以执行的二进制代码。 除了.so之外的编译结果,并不会自动打包到APK中。
dex文件反编译之后就是smali代码。...接触过Android逆向的小伙伴都会遇到smali语言,简单的逆向过程 [apk -> smali -> java]。有的逆向工具无法将smali语言反编译成java源码,只逆向到smali语言这层。...或者反编译成java源码无法运行(smali宽松型语言)。 ? ?...加载插件后关闭Android Studio再重新打开。 导入源码(apk逆向的smali)。 ? 选择要加载smali源码。 ? 连续next。 ? 加载后就能看到smali。 ?...tcp后的端口为上图添加的端口,jdwp后的端口为在apk中运行的APP端口。 ? 为smali打上断点,运行Debug[Run->Debug],开始调试。 ? ? ?
比如 开发服务器使用 192.168.1.232服务器, 测试服务器使用 192.168.1.245服务器, 正式上线后服务器地址是http://xxxx.com。 ...技术关键词: buildConfigField, BuildConfig 思路: 在gradle脚本中,使用 buildConfigField 声明一个字段,编译成功后,会为这个字段生成静态常量,我们可以在代码中使用这个常量...而在成功build后,gradle会为 美工不同的类型环境生成不同的apk包,比如一次性就生成了 测试,开发,上线三个apk包。...,这是为了 代码编译的方便,使得在各个环境下都有 API_HOST 这个字段。...buildConfigField("String", "API_HOST", ""http://192.168.1.232"") 3.开始 build ,完成后,可以在代码中使用: String str
在Android中,字符串是存在dex文件中的,以String表进行存储,通过StringID可以查找到对应的String。...如果我们注入了另外一个包含相同类的dex文件,那么如果是在解释模式下执行,调用test1时,就会在新的dex中找到test1方法,而这个test1方法中的字符串索引是相对于这个dex而言的,而不是apk...这样我们编译时产生的机器码实际上依赖的是早先apk自身的Test类的代码,而运行的时候是执行的注入dex中的代码,虚拟机在解析这个0x4ee2字符串索引时候,会从注入的dex的字符串常量池中查找,实际上这个...由于无法通过索引0x4ee2找到字符串,虚拟机会在产生一个无效的地址,这个地址指向的也许是另外一个字符串,也许指向的是一块非法的内存,那么我们再将这个字符串读出来写到文本框时,就会引发不可预知的异常(代码里的...总结 我们使用不同jar/dex中新的class覆盖旧的class时,需要注意,在inline场景下,编译器会将一些索引硬编码到机器码中,导致与运行时的数据不一致。
NDK在编译的时候,会自动编译多个不同CPU需要的动态链接库。并都打包在最终的APK文件中。 在不同的Android系统安装的时候,会自动选择正确的CPU类型安装其中一种。...常量字符串虽然简便,但无法完成多国语言自动切换等基本功能,在正式的项目中应当避免这样使用。...点击CALLJNI按钮后,文本框显示的信息表示JNI正常执行了。 解析包含JNI库的APK安装文件 先上一张apk包的文件结构图片吧: ?...在当前的Android版本中,在APK程序中内嵌可执行文件,需要通过以下几个步骤: 在NDK中编译对应的源代码。或者在其它语言环境中,使用对应工具,生成在Android环境可以执行的二进制代码。...除了.so之外的编译结果,并不会自动打包到APK中。所以编译出的二进制代码,需要作为数据文件,放入APK的资源区。
现有一个apk的开启界面如下(夜神模拟器打开): 实现: 1. 屏蔽"服务器地址"的文本框,让用户无法选中文本框。 2. 为该apk添加开机启动。...unknown: 存放一些txt文本文件和没有编译过的源文件等。 AndroidManifest.xml: 项目的总配置文件,也是项目的入口文件,记录应用中所使用的各种组件。...的源代码,test是apk编译后的源代码。...无法选中文本框 让用户无法选中指定的文本框,我用的方法是在xml文件里找到对应的控件里添加android:focusable="false"属性。...在EditText控件标签的最后添加android:focusable="false"属性,即可实现无法选中该文本框。
1.android资源文件分为两类: 第一类是res目录下存放的可编译资源文件,编译时,系统会自动在R.java中生成资源文件的十六进制值 Resources resources = getResources...(); String appName = resources.getString(R.string.app_name); 第二类是assets目录下存放的原始资源文件,apk在编译时不会编译...AssetManager的addAssetPath方法会在app启动的时候把当前apk的路径传进去,就能访问apk的所有资源了。...,构造出插件类的对象dynamicObject,然后就可以让插件中的类读取插件中的资源了 mLoadClassDynamic = classLoader.loadClass...生成不同的ClassLoader,然后通过反射框架取出相应的资源,最终加载显示 doSomething还有另外一个种写法,直接访问R.java的内部类drawable/string/layout中的相应字段对应的十六进制值
提交申请 使用注册的开发者账号登录后: ? 创建应用: ? ? 接下来就等着微信审核了,上传图标的时候,我用了微信的案例图标,不知道会不会审核不通过 o(╯□╰)o 果然被枪毙了…....特别注意: 在申请应用的时候填写的应用签名,这个签名是由应用的签名文件keystore决定的,在填这个签名的时候,一定要用正式的keyStore生成apk,安装到手机,然后用微信提供的获取应用签名的apk...生成APK后,安装到手机,再分享下,good ,233333333333…. ---- 添加微信SDK到工程 微信SDK下载 ? 下载解压后,我们可以看到 ?...第二种方式: 复制jar,到app— —src— —main— —libs文件夹下 在AS工程中右键点击要添加的jar,在弹出菜单中点击Add As Library....我这里并没有登录~ ---- 分享文本到好友或朋友圈 TIP:记得使用release版本来测试 亲 Code 核心代码: /** * 发送文本到微信 * * @param
前言 原始方式 在我们的开发过程中,需要获取XML布局文件中的ViewId,以便其赋值显示,我们习惯使用findViewById进行操作,可这样会导致很多的模版代码出现。...ViewBinding 使用了编译时生成的绑定类,在 xml 布局文件中的每个视图都会生成一个对应的绑定类对象,因此在编译时检测到视图名称的错误。...ViewBinding 不会增加 APK 大小,因为它只是编译时生成的代码。 在多个模块中引用同一个视图时可能会出现命名冲突的问题,需要通过手动指定全限定名解决。...Kotlin扩展 会增加 APK 的大小,因为它是在运行时动态添加的函数。 总体而言 ViewBinding 在类型安全性和编译时错误检测方面比 Kotlin扩展 更好。...ViewBinding 原理就是 Google在那个用来编译的gradle插件中增加了新功能,当某个module开启ViewBinding功能后,编译的时候就去扫描此模块下的layout文件,生成对应的
概述 在我们的开发过程中,需要获取XML布局文件中的ViewId,以便其赋值显示,我们习惯使用findViewById进行操作,可这样会导致很多的模版代码出现。...module获得XML布局文件对应的绑定类 在gradle文件中开启ViewBinding功能后,编译器就会为此模块下的每个布局文件都产生一个对应的绑定类。...就是Google在那个用来编译的gradle插件中增加了新功能,当某个module开启ViewBinding功能后,编译的时候就去扫描此模块下的layout文件,生成对应的binding类。...总结 目前ViewBinding的功能还不够完善,比如XML中使用了 inClude 标签时无法对view进行引用。但总体来说已经很不错了。...而且 ViewBinding 在使用的过程中不存在类型转换以及空指针异常的问题。因为在绑定类中已经全部定义好了,开发者直接使用就可以。 ----
如何显示文本(URL,不同大小、字体、颜色的文本) activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/...textView2.setMovementMethod(LinkMovementMethod.getInstance()); } } 二.<em>在</em>TextView...<em>中</em>显示表情图像和<em>文本</em> 图片目录: activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res...} public int getResourceId(String name){ try { //根据资源ID的变量名获取Field对象 ,使用...Field field = R.drawable.class.getField(name); // 获取并返回资源的 id的字段(静态变量)的值,使用反射机制。
概述 在我们的开发过程中,需要获取XML布局文件中的ViewId,以便其赋值显示,我们习惯使用findViewById进行操作,可这样会导致很多的模版代码出现。...module获得XML布局文件对应的绑定类 在gradle文件中开启ViewBinding功能后,编译器就会为此模块下的每个布局文件都产生一个对应的绑定类。...就是Google在那个用来编译的gradle插件中增加了新功能,当某个module开启ViewBinding功能后,编译的时候就去扫描此模块下的layout文件,生成对应的binding类。...总结 目前ViewBinding的功能还不够完善,比如XML中使用了 inClude 标签时无法对view进行引用。但总体来说已经很不错了。...而且 ViewBinding 在使用的过程中不存在类型转换以及空指针异常的问题。因为在绑定类中已经全部定义好了,开发者直接使用就可以。
编译并运行该项目后,Activity启动并加载布局文件activity_my.xml,显示一条文本:"Hello world!".../gradlew assembleDebug 编译完成后在app/build/outputs/apk/目录生成apk。 Note: chmod命令是给gradlew增加执行权限,只需要执行一次。...在应用程序被编译之后,SDK 就可以直接使用这个 ID。edit_message 是在项目文件 gen/R.java 中创建一个新的标识符,这个标识符和 EditText 关联。...(建立简单的用户界面)后,我们已经拥有了显示一个activity(一个界面)的app(应用),该activity包含了一个文本字段和一个按钮。...在Android Studio中,按Alt + Enter 可以导入缺失的类(在Mac中使用option + return) 5 把EditText的文本内容关联到一个本地 message 变量,并使用
这个methodID是存储在apk自身的dex中的,每个dex中都有一个String表和Method表(当然还有Class表等其他表)。...那么正常debug版本解释执行时,这个过程是没有任何问题的,包括使用新的类覆盖了旧的类的时候,仍然可以通过自身编译时就决定的methodID拿到正确的方法名,也就可以获取到正确的method并执行。...因为我们是动态加载了dex,这个dex只有在classloader加载dex时才会被发现,dex2oat编译时只知道apk自身中的class的存在。...但是如果apk在Manifest中设置了android:vmSafeMode=”true” ,那么无论是否使用了其他模式进行强制编译,apk会始终以interpret-only方式编译,导致问题一直存在...比如我们使用speed编译,日志中依然是interpret-only: ? ?
领取专属 10元无门槛券
手把手带您无忧上云