《Android Studio开发实战 从零基础到App上线》源码运行问题解答
来源:互联网 发布:weka 数据预处理class 编辑:程序博客网 时间:2024/05/17 08:19
本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题:
一、打开本书源码时,出现“Plugin with id 'com.android.application' not found.”的错误。
问题原因:本书源码以module形式提供,所以不能当作工程打开,而要以模块的形式来导入。
解决办法:
按以下步骤重新导入本书源码:
1、依次选择菜单“File”——“New”——“New Project”,按提示新建一个项目(即Project);
2、项目创建完毕,再依次选择菜单“File”——“New”——“Import Module”,按提示导入具体的demo;
注意要出现Project级别的build.gradle才可以正常编译。
二、导入源码之后,编译提示“Fail to find Build Tools revision 25.0.2”,如下图所示:
问题原因:因为本书源码里面的build.gradle里面的buildToolsVersion取值为25.0.2,所以as提示要用这个版本的编译工具来编译。
解决办法:有下面两个办法:
1、单击错误文字下面的链接“Install Build Tools 25.0.2 and sync project”,按提示下载并安装该版本的编译工具。
2、如果不想安装Build Tools 25.0.2,也可自行修改build.gradle,把buildToolsVersion取值改为你电脑上的编译工具版本号。
三、导入部分模块提示filedialog找不到,错误描述为“Project with path ':filedialog' could not be found in root project 'media'”。
问题原因:第十章的network_client、第十一章的event、第十三章的media这几个模块的压缩包里额外多了filedialog目录,这是因为filedialog是个文件对话框库,network_client、event、media这三个模块依赖于filedialog模块。
解决办法:
对于network、event、media这几个模块,要先按模块方式导入filedialog,然后再导入自身模块。
四、部分手机上无法正常显示购物车图片。
问题原因:Android7.0级以上手机默认不分配sd卡存储权限导致的。即使你在设置中开启存储权限,重启app也看不到购物车商品图片,这是因为代码有判断SharedPreferences保存的first数值,如果不是首次运行则不进行图片加载操作。
解决办法:
修改storage模块中ShoppingCartActivity.java的downloadGoods方法,把下面这行代码:
购物车功能涉及到第四章的storage模块和第五章的senior模块,另外其它几章有涉及到SD卡操作的地方也要加以注意。
五、network_server.rar里面的几个工程无法用Android Studio打开。
问题原因:该压缩包里的是服务端工程,需要使用Eclipse打开。
解决办法:
到 http://www.eclipse.org/downloads/packages/release/Oxygen/1A 下载Java EE版本的Eclipse,安装完成后再导入network_server.rar的几个工程。
这个网络通信服务端的代码适用于本书的以下章节:
1、“10.4.2 Socket通信”章节,Socket服务端的源码见本书附录Socket工程的TestServer.java
2、“10.5 实战项目:仿手机QQ的聊天功能”章节,服务器方面要实现三个后台功能,分别是:
2.1. 文件上传功能,源码参见本书附录UploadTest工程里面的UploadServlet.java
2.2. 获取好友列表接口,源码参见本书附录UploadTest工程里面的QueryFriend.java
2.3. Socket服务器,源码参见本书附录Socket工程,主程序入口在ChatServer.java
六、成功运行仿QQ聊天的App,发现好友列表页面出现乱码。
问题原因:network_server.rar里面的工程代码采用了UTF-8编码,而开发者电脑上的Eclipse默认是GBK编码,编码方式不一致就导致乱码了。
解决办法:
通过以下步骤把Eclipse的文件编码由GBK改为UTF-8,依次选择菜单“Window”——“Preferences”——“General”——“Workspace”,在窗口下方找到“Text file encoding”,把编码方式改为“Other”——“UTF-8”,如下图所示:
七、部分手机使用DownloadManager下载图片会闪退。
问题原因:Android7.0之后增强了文件访问权限,DownloadManager.COLUMN_LOCAL_FILENAME被废弃,如果在7.0及以上手机访问该字段会触发异常java.lang.SecurityException。
解决办法:
改为使用Uri方式访问文件,即把COLUMN_LOCAL_FILENAME改为COLUMN_LOCAL_URI,具体到代码里则是将下面这行代码
八、导入mixture模块提示不存在WebScriptActivity
问题原因:当时为了精简本书删了一部分内容,demo的相关代码也删了,AndroidManifest.xml的WebScriptActivity漏了删。
解决办法:把AndroidManifest.xml里的下面这行删除即可
九、jni编译的so库无法在部分手机上正常使用。
问题原因:Android6.0之后,App如果通过jni接口调用了so库,则这个so库必须把相关库编译进去,因为系统将不允许App访问系统库。倘若在build.gradle的defaultConfig节点下补充ndk的编译说明,则编译出来的so文件无法在Android6.0上正常调用。
解决办法:
在build.gradle中采用externalNativeBuild方式编译jni工程,即在jni目录下提供专门的Android.mk编译文件,由该mk文件配置jni文件的编译规则。externalNativeBuild的配置例子如下所示:
十、Android.mk内部只能使用绝对路径,不能使用相对路径。
问题原因:原来的Android.mk是带BOM格式,所以编译会出状况,需要另存为不带BOM的才可以正常使用相对路径。
解决办法:
到 https://pan.baidu.com/s/1hsu2i2K 下载最新的jni源码,并覆盖到mixture模块的jni目录。
十一、在部分手机上无法查看已连接的蓝牙设备。
问题原因:Android6.0之后对蓝牙功能的校验也变严格了,即使已经在AndroidManifest.xml声明蓝牙的相关权限如BLUETOOTH_ADMIN和BLUETOOTH,App也不能正常检测到附近的蓝牙设备。
解决办法:
在AndroidManifest.xml中增加下面两个权限声明:
十二、补充几个在Android Studio 3.0上面使用API27(Android8.1)编译时发现的问题解决办法:
1、编译group模块提示下面的编译错误:
把v.getId()的类型强制转换为int型,即将“v.getId()”改为“(int)v.getId()”。
2、编译mixture模块提示下面的编译错误:
在mixture模块的build.gradle文件中增加下面的编译配置:
更多疑难问题的解答未完待续
一、打开本书源码时,出现“Plugin with id 'com.android.application' not found.”的错误。
问题原因:本书源码以module形式提供,所以不能当作工程打开,而要以模块的形式来导入。
解决办法:
按以下步骤重新导入本书源码:
1、依次选择菜单“File”——“New”——“New Project”,按提示新建一个项目(即Project);
2、项目创建完毕,再依次选择菜单“File”——“New”——“Import Module”,按提示导入具体的demo;
注意要出现Project级别的build.gradle才可以正常编译。
二、导入源码之后,编译提示“Fail to find Build Tools revision 25.0.2”,如下图所示:
问题原因:因为本书源码里面的build.gradle里面的buildToolsVersion取值为25.0.2,所以as提示要用这个版本的编译工具来编译。
解决办法:有下面两个办法:
1、单击错误文字下面的链接“Install Build Tools 25.0.2 and sync project”,按提示下载并安装该版本的编译工具。
2、如果不想安装Build Tools 25.0.2,也可自行修改build.gradle,把buildToolsVersion取值改为你电脑上的编译工具版本号。
三、导入部分模块提示filedialog找不到,错误描述为“Project with path ':filedialog' could not be found in root project 'media'”。
问题原因:第十章的network_client、第十一章的event、第十三章的media这几个模块的压缩包里额外多了filedialog目录,这是因为filedialog是个文件对话框库,network_client、event、media这三个模块依赖于filedialog模块。
解决办法:
对于network、event、media这几个模块,要先按模块方式导入filedialog,然后再导入自身模块。
四、部分手机上无法正常显示购物车图片。
问题原因:Android7.0级以上手机默认不分配sd卡存储权限导致的。即使你在设置中开启存储权限,重启app也看不到购物车商品图片,这是因为代码有判断SharedPreferences保存的first数值,如果不是首次运行则不进行图片加载操作。
解决办法:
修改storage模块中ShoppingCartActivity.java的downloadGoods方法,把下面这行代码:
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";改为下面这段代码:
String path = "";//Android7.0之后默认关闭App的SD卡权限,所以对于7.0以上系统把存储路径改为App安装路径的data目录下if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";} else {path = MainApplication.getInstance().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString() + "/";}然后在手机上卸载并重装storage。
购物车功能涉及到第四章的storage模块和第五章的senior模块,另外其它几章有涉及到SD卡操作的地方也要加以注意。
五、network_server.rar里面的几个工程无法用Android Studio打开。
问题原因:该压缩包里的是服务端工程,需要使用Eclipse打开。
解决办法:
到 http://www.eclipse.org/downloads/packages/release/Oxygen/1A 下载Java EE版本的Eclipse,安装完成后再导入network_server.rar的几个工程。
这个网络通信服务端的代码适用于本书的以下章节:
1、“10.4.2 Socket通信”章节,Socket服务端的源码见本书附录Socket工程的TestServer.java
2、“10.5 实战项目:仿手机QQ的聊天功能”章节,服务器方面要实现三个后台功能,分别是:
2.1. 文件上传功能,源码参见本书附录UploadTest工程里面的UploadServlet.java
2.2. 获取好友列表接口,源码参见本书附录UploadTest工程里面的QueryFriend.java
2.3. Socket服务器,源码参见本书附录Socket工程,主程序入口在ChatServer.java
六、成功运行仿QQ聊天的App,发现好友列表页面出现乱码。
问题原因:network_server.rar里面的工程代码采用了UTF-8编码,而开发者电脑上的Eclipse默认是GBK编码,编码方式不一致就导致乱码了。
解决办法:
通过以下步骤把Eclipse的文件编码由GBK改为UTF-8,依次选择菜单“Window”——“Preferences”——“General”——“Workspace”,在窗口下方找到“Text file encoding”,把编码方式改为“Other”——“UTF-8”,如下图所示:
七、部分手机使用DownloadManager下载图片会闪退。
问题原因:Android7.0之后增强了文件访问权限,DownloadManager.COLUMN_LOCAL_FILENAME被废弃,如果在7.0及以上手机访问该字段会触发异常java.lang.SecurityException。
解决办法:
改为使用Uri方式访问文件,即把COLUMN_LOCAL_FILENAME改为COLUMN_LOCAL_URI,具体到代码里则是将下面这行代码
int nameIdx = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME);改为下面这行代码:
int nameIdx = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI);注意network模块的DownloadImageActivity.java和ChatMainActivity.java里的相关代码都要修改。
八、导入mixture模块提示不存在WebScriptActivity
问题原因:当时为了精简本书删了一部分内容,demo的相关代码也删了,AndroidManifest.xml的WebScriptActivity漏了删。
解决办法:把AndroidManifest.xml里的下面这行删除即可
<activity android:name=".WebScriptActivity" />
九、jni编译的so库无法在部分手机上正常使用。
问题原因:Android6.0之后,App如果通过jni接口调用了so库,则这个so库必须把相关库编译进去,因为系统将不允许App访问系统库。倘若在build.gradle的defaultConfig节点下补充ndk的编译说明,则编译出来的so文件无法在Android6.0上正常调用。
解决办法:
在build.gradle中采用externalNativeBuild方式编译jni工程,即在jni目录下提供专门的Android.mk编译文件,由该mk文件配置jni文件的编译规则。externalNativeBuild的配置例子如下所示:
externalNativeBuild { ndkBuild { path "src/main/jni/Android.mk" } }
十、Android.mk内部只能使用绝对路径,不能使用相对路径。
问题原因:原来的Android.mk是带BOM格式,所以编译会出状况,需要另存为不带BOM的才可以正常使用相对路径。
解决办法:
到 https://pan.baidu.com/s/1hsu2i2K 下载最新的jni源码,并覆盖到mixture模块的jni目录。
十一、在部分手机上无法查看已连接的蓝牙设备。
问题原因:Android6.0之后对蓝牙功能的校验也变严格了,即使已经在AndroidManifest.xml声明蓝牙的相关权限如BLUETOOTH_ADMIN和BLUETOOTH,App也不能正常检测到附近的蓝牙设备。
解决办法:
在AndroidManifest.xml中增加下面两个权限声明:
<!-- Android6.0 蓝牙搜索不到设备,需要补充下面两个权限 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
十二、补充几个在Android Studio 3.0上面使用API27(Android8.1)编译时发现的问题解决办法:
1、编译group模块提示下面的编译错误:
Error:(65, 11) Error: Expected resource of type id [ResourceType] public void onClick(View v) { ~~group\src\main\java\com\example\group\adapter\LinearDynamicAdapter.java:66: Error: Expected resource of type id [ResourceType] int position = getPosition(v.getId()/10); ~~group\src\main\java\com\example\group\adapter\LinearDynamicAdapter.java:79: Error: Expected resource of type id [ResourceType]解决办法:
把v.getId()的类型强制转换为int型,即将“v.getId()”改为“(int)v.getId()”。
2、编译mixture模块提示下面的编译错误:
Error:Execution failed for task ':mixture:transformNativeLibsWithMergeJniLibsForRelease'.> More than one file was found with OS independent path 'lib/armeabi/libjni_mix.so'解决办法:
在mixture模块的build.gradle文件中增加下面的编译配置:
packagingOptions { pickFirst 'lib/armeabi/libjni_mix.so' }修改后的android节点示例如下:
android { compileSdkVersion 27 buildToolsVersion "27.0.1" defaultConfig { applicationId "com.example.mixture" minSdkVersion 16 targetSdkVersion 27 versionCode 1 versionName "1.0" } packagingOptions { pickFirst 'lib/armeabi/libjni_mix.so' } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } externalNativeBuild { ndkBuild { path "src/main/jni/Android.mk" } }}
更多疑难问题的解答未完待续
阅读全文
2 0
- 《Android Studio开发实战 从零基础到App上线》源码运行问题解答
- 《Android Studio开发实战 从零基础到App上线》出版后记
- 《Android Studio开发实战 从零基础到App上线》资源下载和内容勘误
- android项目从零到上线全过程
- 从开发到上线,实战持续交付
- 从零基础到App Store
- Android项目从零到上线的全过程
- Android 项目从零到上线的全过程
- Swift视频教程_零基础Swift实战开发从入门到精通
- 初学者福利:java从零基础到真正大型企业的项目实战开发学习资源
- 我的iOS自学之路-从零基础到企业实战开发
- 从开发到上线 实战持续交付 -李道兵
- 《iOS开发指南:从零基础到App Store上架》试读:2.3 应用生命周期
- 《iOS开发指南:从零基础到App Store上架(第2版)》
- 《iOS开发指南:从零基础到App Store上架(第2版 )(3).pdf》
- iOS开发指南:从零基础到App Store上架(第2版 )
- 1-读书笔记----iOS开发指南:从零基础到App Store上架--iOS入门
- 2-读书笔记----iOS开发指南:从零基础到App Store上架--iOS视图和控件
- Oracle SQL Developer 复制数据库数据
- BZOJ 1589 [Usaco2008 Dec] Tarjan缩点+记忆化搜索 解题报告
- react-native-easy-toast, 一款简单易用的 Toast 组件,支持 Android&iOS.
- LEDA使用
- 数码相框解决方案深度分析
- 《Android Studio开发实战 从零基础到App上线》源码运行问题解答
- 小程序为餐饮行业带来了什么新的商机?
- AngularJS事件
- Linux常见命令
- java实现查找List集合中的最大值和最小值
- Prometheus监控的最佳实践——关于监控的3项关键指标
- JSP:使用spring框架直接返回一个bean类到jsp中,bean类有个数据类型是Timestamp,在前端jsp中格式化
- apk的R文件
- BZOJ1003 物流运输 [最短路][DP]