Android APP开发入门

目录

android_studio很好用的一个就是debug  1
1导入demo编译出错 1
4使用as运行安装不了apk安装adb 2
5SeekBar组件使用    2
6bitmap的使用  3
7查找功能   3
10ANativeWindow_fromSurface的使用说明    3
11ANativeWindow作用   4
12封装成JNI调用底层数据  4
13read_time_out 4
gradle版本太低修改    4
ndk_jni编译生成so库  6
ndk-build出错 7
打包找不到库  7
更改project显示方式_才可以出现正常文件夹列表  8
工程添加c++支持 8
调用库打开串口失败   9
9使用dataoutputstream修改权限使用chmod命令    9
17复制java等代码到新工程区    10
19JNI添加 字符串 11
app旋转   12
输入框挡住   12
添加百分比布局报错   12

android_studio很好用的一个就是debug
先打断点 在程序前面点击出现 圆点 即可,就会在开启debug 之后,会停在断点位置

然后就看 Run 下是如何一步步调试 ,然后每到一个地方,都可以看对应的变量的数据值这些

关键点就是数据点的查看

要等着建立链接

1导入demo编译出错

Error:The module 'app' is an Android project without build variants, and cannot be built.
Please fix the module's configuration in the build.gradle file and sync the project again.

结果发现是 因为

classpath ‘com.android.tools.build:gradle:3.1.0’ 配置过高, SDK 使用 高版本。

改为低一些的版本即可,或者是更新 SDK 吧!

Error:Failed to find target with hash string 'android-26' in: C:\Users\Admin\AppData\Local\Android\SdkConsult IDE log for more details (Help | Show Log)
<a href="install.android.platform">Install missing platform(s) and sync project</a>

没有找到相关的 SDK API ,所以我们更新 SDK吧!
参考
https://blog.csdn.net/sunbinkang/article/details/78632652
直接在 android studio 中进行更新即可

还要安装 build-tools !!!

4使用as运行安装不了apk安装adb
Unknown failure (at android.os.Binder.execTransact(Binder.java:697))
Error while Installing APKs

是因为没有安装 adb ?

那就添加 adb 到 系统环境

最后按照
https://blog.csdn.net/lplj717/article/details/77991365

解决

5SeekBar组件使用
Android 拖动条 SeekBar 使用

有这样的情况,就是我们在 Android 开发过程中,使用SeekBar 这个控件, 拖动视频进度条、音频进度条等

然后这段代码实现:

  1. 实现一个OnSeekBarChangeListener 接口

  2. 给SeekBar 设置 setOnSeekBarChangeListener() 监听

  3. 重写 onProgressChanged(SeekBar seekbar, int progress, boolean fromUser)方法即可

6bitmap的使用
bitmap 在 Android 中指的是一张图片 图片类型可以是 png、jpg

7查找功能
ctrl + f

在当前工程内查找文本【Ctrl+Shift+F】
在 Edit 中找到 Find 再点击出

10ANativeWindow_fromSurface的使用说明
ANativeWindow_fromSurface
作用是: c++ 后台使用 ANativeWindow_fromSurface 将 surface 转化为 ANativeWindow;
需要头文件: #include <android/native_window_jni.h>

出现ANativeWindow_fromSurface 返回空指针问题是

https://www.xuebuyuan.com/2183201.html

给jni 层传入 SurfaceView 的 Surface 指针后,ANativeWindow_fromSurface 返回值为空,有两个原因:

  1. 在非 UI 线程中, new SurfaceView 之后,马上传给 ANativeWindow_fromSurface ,结果Surface 还没创建好,可能在Creating 状态,所以返回值为空

  2. 在UI线程中创建SurfaceView ,然后在 非UI 线程中调用 ANativeWindow_fromSurface ,结果也会返回空值

所以总结使用 ANativeWindow_fromSurface 方法:

  1. 在UI 线程中创建SurfaceView , 就需要在 UI 线程中使用 ANativeWindow_fromSurface

  2. 在非 UI 线程中创建 SurfaceView ,需要等待SurfaceView 创建完成之后,才能调用 ANativeWindow_fromSurface ,至于能不能在UI 线程中调用 ANativeWindow_fromSurface ,暂时还要测试

11ANativeWindow作用
https://blog.csdn.net/ericbar/article/details/80416328

一般是 基于 FFmpeg 和 SurfaceView 实现Android 原生窗口(ANativeWindow) 的视频播放

在显示层,JAVA 层基于 SurfaceView ,在原生(本地 C/C++)层基于ANativeWindow 来实现渲染

12封装成JNI调用底层数据
需要同时三个地方进行添加使用

参考代码即可

13read_time_out
AS创新新项目或导入项目时出现:

Read timed out
Error:SSL peer shut down incorrectly

解决办法:在project的gradle中加入以下代码
顺序很重要

repositories {
google()
mavenCentral()
maven { url ‘https://maven.google.com’ }
jcenter()
}

gradle版本太低修改
新建工程

报错如下

修改
HyperSerial\gradle\wrapper
下的
gradle-wrapper.properties

distributionUrl=https://services.gradle.org/distributions/gradle-4.6-all.zip

然后要指定 我们下载的 gradle

最后是手动指定成功的

https://services.gradle.org/distributions/
下载需要的版本

然后放到自己喜欢的目录

就指定

ndk_jni编译生成so库

https://blog.csdn.net/weixin_42676203/article/details/81561501

ndk-build 就可以产生 so 库

ndk-build出错

E:\android_studio_project\serialport\app\src\main>ndk-buildAndroid NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-16.
Android NDK: WARNING: APP_PLATFORM android-16 is higher than android:minSdkVersion 1 in ./AndroidManifest.xml.NDK binaries will *not* be compatible with devices older than android-16.C:/Users/Admin/AppData/Local/Android/Sdk/ndk-bundle/build//../build/core/setup-app.mk:79: *** Android NDK: Aborting    .  Stop.

说明
Application.mk设置的ndk版本与使用的ndk版本不一致

解决方案
在Application.mk中添加或修改: 低版本的

APP_PLATFORM := android-14

APP_ABI := all

然后在终端使用 ndk-build 编译生成 so
在 libs 下的 so ,我们只需要 armeabi-v7a 即可,剪切过去 jniLibs 对应目录去

ndk-build clean

打包找不到库

dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/android.serialport-
eebyPOtzP29wpk6xudWa8w==/base.apk"],nativeLibraryDirectories=[/data/app/android.serialport-
eebyPOtzP29wpk6xudWa8w==/lib/arm, /data/app/android.serialport-
eebyPOtzP29wpk6xudWa8w==/base.apk!/lib/armeabi-v7a, /system/lib, /product/lib]]]couldn't find "libSerialPort.so"

就是因为自己 加载的 so 不对导致的, 下面的三个名字要一致才行

 ndk {moduleName "serial_port"abiFilters "armeabi-v7a"}LOCAL_MODULE    := serial_portstatic {System.loadLibrary("serial_port");
}

更改project显示方式_才可以出现正常文件夹列表
在工程界面点击 Android -> project 就可以更改工程目录 显示方式

工程添加c++支持
https://www.cnblogs.com/lsdb/p/9337285.html

要 先安装相关的 tool

然后才能看到 c++ 相关的

向已有的 工程添加 C++ 实际就是 IDE自动做好的步骤,手动去实现

1 安装 CMake/LLDB/ NDK
2 项目中创建源文件
3 创建和编写 CMake 构建脚本CMakeLists.txt
4 向Gradle注册构建请求

调用库打开串口失败

No implementation found for java.io.FileDescriptor android.serialport.SerialPort.open(java.lang.String, int, int) (tried Java_android_serialport_SerialPort_open and Java_android_serialport_SerialPort_open__Ljava_lang_String_2II)

是软连接失败导致?

是我的 库 和 操作不对?

最终发现要使用 google 的 api

在 serialPort.java 中如下使用
package android_serialport_api;

然后
调用时候使用

String[] allDevicesPath = new android_serialport_api.SerialPortFinder().getAllDevicesPath();android_serialport_api.SerialPort serialPort = new android_serialport_api.SerialPort(new File(allDevicesPath[i]), baudRate, 0);

就可以打开 相应的串口去了

9使用dataoutputstream修改权限使用chmod命令
执行 process.waitFor(); 时候死锁

  1. waitfor 问题描述分析
    1.主进程中调用pb.start会创建一个子进程,用于执行shell /exe 脚本。子进程创建后会和主进程分别独立运行。
  2. 因为主进程需要等待脚本执行完成,然后对脚本返回值或输出进行处理,所以这里主进程调用Process.waitfor等待子进程完成。
  3. 子进程执行过程就是不断的打印信息。主进程中可以通过Process.getInputStream和Process.getErrorStream获取并处理。
  4. 这时候子进程不断向主进程发生数据,而主进程调用Process.waitfor后已挂起。当前子进程和主进程之间的缓冲区塞满后,子进程不能继续写数据,然后也会挂起。
  5. 这样子进程等待主进程读取数据,主进程等待子进程结束,两个进程相互等待,最终导致死锁。
    ————————————————
    原文链接:https://blog.csdn.net/qq_27948659/article/details/80895860

我是直接加延时!!!

最好按照下面的来进行
https://blog.csdn.net/qq_27948659/article/details/80895860

17复制java等代码到新工程区
1复制过去的代码都是红色

app 的 build.gradle 中加进去

2JNI路径修改

  1. cpp 的JNI 文件 修改
    Java_com_nano_hyper_nano_mvCamera_CameraUninit

  2. 编译 cpp 时候出错 cmake 出错

Error while executing process C:\Users\Admin\AppData\Local\Android\Sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {--build E:\android_studio_project\git_project\nano\app\.cxx\cmake\debug\armeabi-v7a --target mvCamera}
[1/2] Building CXX object CMakeFiles/mvCamera.dir/src/main/cpp/mvCamera.cpp.oFAILED: C:\Users\Admin\AppData\Local\Android\Sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe  --target=armv7-none-linux-androideabi24 --gcc-toolchain=C:/Users/Admin/AppData/Local/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=C:/Users/Admin/AppData/Local/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/windows-x86_64/sysroot  -DmvCamera_EXPORTS -I../../../../src/main/include -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security   -O0 -fno-limit-debug-info  -fPIC -MD -MTCMakeFiles/mvCamera.dir/src/main/cpp/mvCamera.cpp.o-MF CMakeFiles\mvCamera.dir\src\main\cpp\mvCamera.cpp.o.d -oCMakeFiles/mvCamera.dir/src/main/cpp/mvCamera.cpp.o -c E:\android_studio_project\git_project\nano\app\src\main\cpp\mvCamera.cppE:\android_studio_project\git_project\nano\app\src\main\cpp\mvCamera.cpp:135:2: error: invalid preprocessing directive

135:2: error: invalid preprocessing directive 声明有错

  1. unable to execute Clang-Tidy:connot create property=Diagnostics for JavaBean =

3JNI_cpp报错

2020-03-12 10:53:02.782 11201-11201/com.nano.hyper.nano I/mvCamera: onStart
2020-03-12 10:53:02.788 11201-11201/com.nano.hyper.nano E/mvCamera: CameraGetImageBuffer failed!!!!
2020-03-12 10:53:02.788 11201-11201/com.nano.hyper.nano E/mvCamera: envi get time g_rawCount: 0  cap_raw_bands : 0
2020-03-12 10:53:02.788 11201-11201/com.nano.hyper.nano E/mvCamera: envi get time 20203122532
2020-03-12 10:53:02.788 11201-11201/com.nano.hyper.nano E/mvCamera: PFPI open str 1Row :
2020-03-12 10:53:02.788 11201-11201/com.nano.hyper.nano A/libc: FORTIFY: fprintf: null FILE*
2020-03-12 10:53:02.789 11201-11201/com.nano.hyper.nano A/libc: Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 11201 (nano.hyper.nano), pid 11201 (nano.hyper.nano)
2020-03-12 10:53:02.712 11201-11201/com.nano.hyper.nano I/nano.hyper.nano: type=1400 audit(0.0:495): avc: denied { open } for path="/dev" dev="tmpfs" ino=14415 scontext=u:r:untrusted_app:s0:c63,c256,c512,c768 tcontext=u:object_r:device:s0 tclass=dir permissive=1

## 没有添加 SD 卡权限

19JNI添加 字符串

llBackToUp = (LinearLayout) findViewById(R.id.ll_back_up);MButtonOnclickedListener mButtonOnclickedListener = new MButtonOnclickedListener();llBackToUp.setOnClickListener(mButtonOnclickedListener);jobjectArray paths_jstring call_Java_com_nano_hyper_nano_mvCamera_CameraCommonCall(JNIEnv *env, jobject instance,jint hCamera, jstring call_) {const char *call = env->GetStringUTFChars(call_, 0);int status = CameraCommonCall(hCamera, call, NULL, 0);env->ReleaseStringUTFChars(call_, call);return status;
}

app旋转
//显示软键盘,并让布局压缩
android:windowSoftInputMode=“stateVisible|adjustResize” // 设置软键盘布局
android:screenOrientation=“portrait”

输入框挡住
https://www.jianshu.com/p/1fb4f6d61ca3

添加百分比布局报错

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0-rc02] AndroidManifest.xml:22:18-91is also present at [androidx.core:core:1.0.1] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:13:5-26:19 to override.

本来一直有的错

ABIs [armeabi-v7a,armeabi] set by 'android.injected.build.abi' gradle flag contained 'ARMEABI' not targeted by this project.

Android APP开发入门相关推荐

  1. 5G 时代的 Android App 开发入门与项目实战

    随着移动互联网的持续发展,Android系统从智能手机逐步拓展到平板电脑.智能电视.车载大屏.智能家居.智能手表等诸多设备,Android开发依然是前景可期的IT岗位. 当然,整个社会正在迈向5G时代 ...

  2. android开发入门与实践_我的新书《Android App开发入门与实战》已经出版

    前言 工作之余喜欢在CSDN平台上写一些技术文章,算下时间也有两三年了.写文章的目的一方面是自己对技术的总结,另一方面也是将平时遇到的问题和解决方案与大家分享,还有就是在这个平台上能和大家共同交流. ...

  3. 傻瓜式Android APP开发入门教程

    这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤一一讲解,非常简明的一个Android APP开发入门教程,android各种机子和rom的 ...

  4. 《Android App开发入门与项目实战》出版后记

    <Android Studio开发实战:从零基础到App上线>自面世以来,承蒙众多朋友的抬爱,该书一直保持不错的销量,其中第一版的出货量突破一万,第二版的出货量即将突破两万.对于一个程序员 ...

  5. 我的新书《Android App开发入门与实战》已经出版

    文章目录 1. 前言 2. 写书的目的 3. 书籍简介 4. 书籍目标读者群体 5. 书籍比较 6. 书籍特色 7. 书籍章节 8. 书籍封面 9. 购书地址 10. 本书案例及源码下载 1. 前言 ...

  6. java安卓app开发教程,Android app开发入门 —— your 'Hello, World'

    从这篇可以掌握到 Android app开发环境的搭建 开发工具介绍及安装 创建你的"Hello, World" 工程结构的介绍 工程gradle配置 简单布局 代码sample ...

  7. 《Android App开发入门:使用Android Studio 2.X开发环境》——导读

    前 言 学习 Android 程序设计一直困扰着许多初学者,原因有两个.首先,必须学会使用 Java 程序设计语言,并且要懂 Android 的 XML词汇,然后才能开始学习 Android 的程序设 ...

  8. Android app开发入门复习一(1-2章)

    第一章 Android是基于Linux的移动端开源操作系统 第一部Android手机由HTC公司制造 两大操作系统:Android(谷歌公司),iOS(苹果公司) SDK(software delve ...

  9. 《Android App开发入门:使用Android Studio 2.X开发环境》——1-3 Android Studio 快速上手...

    1-3 Android Studio 快速上手

最新文章

  1. 泼冷水:反思机器学习5年大跃进(附论文)
  2. 在x86上成功使用gentoo系统上安装的grub2启动 Mac OS X Leopard 10.5.7
  3. oracle dump函数
  4. 全球及中国手持式无线电台行业十四五发展动态及前景趋势调研报告2022-2027年
  5. 【异步编程学习笔记】JDK中的FutureTask和CompletableFuture详解(使用示例、源码)
  6. Android之Badge显⽰
  7. 服务端配置实现AJAX跨域请求
  8. 从零开始学Pytorch(三)之多层感知机的实现
  9. 官宣!《花木兰》内地定档
  10. 【原创】基于日志增量,统计qps,并基于ip排序
  11. matlab负荷分配程序,利用MATLAB工具箱进行机组负荷优化分配
  12. CenterNet :Objects as Points/CenterTrack:Tracking Objects as Points
  13. 绿色版电子书PDF转换Word转换器
  14. NPOI实现Word段落查找替换
  15. 纯c++读取与显示BMP图片
  16. 【SpringBoot整合缓存】-----spring-boot-starter-cache篇
  17. JS小数点保留后2位
  18. HR必备:29套职业测评和性格测试题库
  19. windows8下linux deepin双系统安装,记录一次Windows+Deepin双系统安装及简单优化
  20. 华为OPENCPU如何自动获取网络时间

热门文章

  1. Vue.js:按键修饰符keyup,keyup.enter,keyup.alt.enter的使用
  2. 全网首发 | Mac版 PS2022 终于来了,支持M1芯片,五大新黑科技
  3. ABAP-逻辑数据库
  4. Android HorizontalScrollView 内容宽度
  5. java本地Cache缓存的使用
  6. 浏览器无法连接网络,学校校园网无法跳转到登录页面
  7. 日本银发经济科技范儿十足
  8. 九章算法笔记D2-坐标型动态规划
  9. RTL8370N 8口千兆交换机 PCB图纸方案资料 和芯片的datasheet
  10. C语言简单实现通讯录