【杂记】全栈开发中碰到的一些问题及解决方法

目录

1. 环境问题

1.1. AndroidStudio

1.1.1. 加入jar、aar的方法:

1.1.2. 模拟器路径权限

1.1.3. gradle安装

1.1.4. gradle问题:

1.1.5. kotlin、gradle插件被禁用

1.1.6. 打开logcat查看日志

1.1.7. 删除多余import

1.1.8. 修改checkstyle规则

1.1.9. 修改工程名称

1.2. 模拟器

1.2.1. 模拟器IP及外部访问

1.2.2. 进入模拟器命令行

1.3. 网络

1.3.1. 手机与PC之间网络不通

1.3.2. PC不能ping手机

1.3.3. 同局域网下手机访问PC

1.4. 小米手机

1.4.1. 小米手机,无法打开usb安装

1.4.2. 真机进入开发者模式

1.5. 华为或荣耀手机

1.5.1. 打开debug级别日志

1.6. iOS

1.6.1. IPhone webserver备忘

1.7. Eclipse

1.7.1. 更换报名

2. 开发问题

2.1. 权限

2.1.1. 应用权限设置

2.2. 底层

2.2.1. 动态加载dex插件

2.2.2. 实现禁止手动删除数据

2.2.3. 定义安全策略

2.2.4. 依赖了kotlin编写的库

2.3. 安全

2.3.1. 可信根加解密

2.3.2. 添加自签名根证书

2.4. JUnit测试

2.4.1. Android中无法写文件

2.4.2. 测试准备与清理

2.5. Logback日志

2.5.1. 配置中的属性

2.5.2. DATA_DIR等内置属性未定义

2.6. Hybrid

2.6.1. 框架

2.6.2. 禁止选中文字

3. 常识

3.0.1. 统一信用码编码规则及校验

3.0.2. 行政区划编号


本文的Word文档存于码云,并会及时更新。

软件技术文档 · flyinmind/学习总结文档备份 – 码云 – 开源中国 (gitee.com)

1. 环境问题

1.1. AndroidStudio

1.1.1. 加入jar、aar的方法:

a)在app下创建目录libs

b)在appbuild.grale中增加implementation fileTree(dir: ‘libs’, include : [‘*.jar’,’*.aar’])

c)将jar、aar文件拷贝到下面;

d)如果AndroidStudio不能识别,则点击菜单File->Invalidate caches/Restart,然后等等重启即可;

1.1.2. 模拟器路径权限

如果手动在AndroidStudio的Device File Explore中创建路径、文件,会导致在app中无权限访问,必须在App中自己创建。

1.1.3. gradle安装

a. 解压到指定路径;

b. 配置GRADLE_HOME指向该路径;

c. 在路径下创建user目录,配置GRADLE_USER_HOME为%GRADLE_HOME%user,用于存放临时文件;

d. 将%GRADLE_HOME%bin加入PATH变量

e. AndroidStudio的File->Settings中搜索Gradle,设置Gradle路径及GradleUser路径;

f. 如果升级gradle,建议下载后,仍然解压到相同路径,这样所有应用的设置不用变动。

1.1.4. gradle问题:

工程目录下build.gradle中指定的是AndroidStudio的gradle的版本,可能是适配器,尽量不要改,或者改成AndroidStudio的版本;

gradlewrappergradle-wrapper.properties指定gradle版本,路径可以写成本地下载的zip文件,比如file:///本地路径,所以这个目录下gradle的zip文件不可以删除。这样可以避免不同的工程都下载一遍。

1.1.5. kotlin、gradle插件被禁用

这两个插件是不可以禁用的,如果禁用,AndroidStudio启动会异常。

这时可以在disabled_plugins.txt中删除相应记录即可,位置如下:

C:Users用户名AppDataRoamingGoogleAndroidStudio4.1disabled_plugins.txt

1.1.6. 打开logcat查看日志

菜单View-Tool Windows中,打开logcat查看日志。

还有其他一些功能也在此目录下;

1.1.7. 删除多余import

菜单 Code-Optimize Imports可以自动删除所有多余的import;

1.1.8. 修改checkstyle规则

在Settings-Inspections中搜索提示的关键词,找到规则,然后勾选或勾除

1.1.9. 修改工程名称

比如将样例工程修改成最终的工程名称,按以下步骤即可完成:

1.关闭Android Studio;

2.修改项目文件夹的名字;

3.修改OldProjectName.iml文件(在项目的根目录的.idea目录下)的名称为新项名称,即OldProjectName.iml修改为NewProjectName.iml;

4.修改.idea/workspace.xml中相应的名称;

5.修改app/build.gradle中的applicationId;

6.然后把该文件中的external.linked.project.id的值也设置为新项目的名称,即 external.linked.project.id=”NewProjectName”;

7.再次打开AndroidStudio即可。

1.2. 模拟器

1.2.1. 模拟器IP及外部访问

在模拟器内部,宿主机器IP为10.0.0.2,模拟器自身IP为10.0.2.15/127.0.0.1/localhost

如果需要在宿主机中直接访问模拟器内部的TCP端口,需要先做映射。

adb forward tcp:8081 tcp:8080

这样就可以访问 http://localhost:8081/xxxxx,请求会被转到虚拟机的8080端口

1.2.2. 进入模拟器命令行

adb -s emulator-5554 shell

1.3. 网络

1.3.1. 手机与PC之间网络不通

一般是路由器设置有问题,可能在路由器无线设置中开启了AP隔离,使得同一路由器下各个节点之间不可互通。

1.3.2. PC不能ping手机

网络防火墙默认是不会禁用出站请求的,但是如果安装了360,在360的安全防护中心->入口防护体系中,如果选择了局域网防护,则PC无法联通手机。

1.3.3. 同局域网下手机访问PC

首先,PC上需启动web服务;

其次,要在系统防火墙高级设置中,添加入站规则开放相应的端口,比如TCP的8080端口;

最后,如果安装了360,需要在安全防护中心->系统防护体系中,关闭网络安全防火。

1.4. 小米手机

1.4.1. 小米手机,无法打开usb安装

插入一张Sim卡,没用的Sim卡也可以,然后再在设置中设置USB调试

1.4.2. 真机进入开发者模式

不同型号得手机,包括华为、小米等,都是在设置的安卓版本上多次点击,即可进入开发者模式。进入开发者模式后,才可以打开USB调试。

1.5. 华为或荣耀手机

1.5.1. 打开debug级别日志

华为手机默认日志级别是info,无论AndroidStudio中设置的是什么,如果要打开debug级别,按以下步骤设置。

1.拨号界面拨号*#*#2846579#*#*可以看到工程菜单;

2.选择后台设置进入;

3.打开 LOG设置,选择 AP日志;

4.回到AndroidStudio中,改变以下日志界别,就可以看到debug了。

1.6. iOS

1.6.1. IPhone webserver备忘

基于SwiftNio开发webserver,SwiftNio是iOS中的netty。

https://www.5axxw.com/wiki/content/zdz096https://www.5axxw.com/wiki/content/zdz096

其他的如GCDWebServer、CocoaHttpServer都已长期无更新

1.7. Eclipse

1.7.1. 更换报名

在包上点右键,选择Refactor,出现更名窗口,输入新的名称,一定要选择Rename subpackages,否则只会新建一个空的包

【杂记】全栈开发中碰到的一些问题及解决方法

2. 开发问题

2.1. 权限

2.1.1. 应用权限设置

在AndroidMenifest.xml中设置,与application同一级别

<uses-permission android_name=”android.permission.INTERNET” />

<uses-permission android_name=”android.permission.ACCESS_WIFI_STATE” />

<uses-permission android_name=”android.permission.WRITE_EXTERNAL_STORAGE” />

同时,在application中设置android:requestLegacyExternalStorage=”true”

2.2. 底层

2.2.1. 动态加载dex插件

a. 使用PathClassLoader类加载器实现动态加载dex插件;

b. 加载前需要调用dex命令将jar文件转为dex文件,dex文件可以从外部下载获得;

c. 因为ClassLoader加载的规则,不同插件不能互访,但是,插件可以访问apk中的类;

2.2.2. 实现禁止手动删除数据

实现一个删除数据的Activity,并在AndroidMenifest.xml-application-android:manageSpaceActivity引用此Acitivity,实现自定义的删除数据管理界面,在此只删除可以删除的,或者全部不删除,比如禁止删除sqlite数据库等。

Activity的定义与普通Activity毫无差异。

2.2.3. 定义安全策略

在AndroidMenifest.xml-application-android:networkSecurityConfig中可以自定义安全策略,比如预置自签名的根证书等。

2.2.4. 依赖了kotlin编写的库

比如okhttp4.x,提示Failed resolution of: Lkotlin/jvm/internal/Intrinsics,

Kotlin并无特别的优点,建议别用了。限制OkHttp4依赖Kotlin,也用不成了。

2.3. 安全

2.3.1. 可信根加解密

使用KeyStore进行加解密,KeyStore的底层用的是Tee。

它的问题是,在黑屏情况下,无法使用。

EncryptedSharedPreferences 使用的也是KeyStore。

https://source.android.google.cn/security/keystorel=zh-cn

【杂记】全栈开发中碰到的一些问题及解决方法

2.3.2. 添加自签名根证书

使用CA机构签发证书,通常成本较高,对于一个测试应用,没必要。所以自己产生一个自签名的根证书;然后用根证书产生二级证书;最后用二级证书生成自己的用户证书。这样就形成了一个证书链。在程序中预置根证书,并信任自己的根证书即可。

怎样生成证书链,请参考此链接:

KeyTool生成证书链及使用_flyinmind的博客-CSDN博客

2.4. JUnit测试

来源:flyinmind

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年10月23日
下一篇 2022年10月23日

相关推荐