• app运行踩过的坑大赏


    背景

    第一次搞app,一脸茫然加一点小兴奋。感谢工作中能给我这个机会被推动着去学习新知识,让我久违地很有动力。
    搭好环境、android SDK Manager下载相关的包、拉好最新项目代码以后,在android studio或者vscode进行首次运行,目标:在模拟器上能显示并运行项目。


    STEP 1:导入依赖

    Terminal-New Terminal

    npm install

    这个命令是根据项目中的package.json等几个配置文件来从镜像导入依赖,这个过程中遇到的报错大多和版本不对、依赖找不到有关,如果是找不到某版本的包,可尝试换一个镜像。

    npm config set …

    待成功安装后进入下一步。


    STEP2:运行

    1、打开模拟器(我用的不是android studio)
    2、Terminal中连接到模拟器端口

    adb connect 端口号

    这一步可能会遇到报错是端口被占用无法连接,解决:重启模拟器再试一次命令,或者cmd taskkill另一个正在占用此端口的任务。

    3、正式启动:
    Terminal:

    react-native run-android

    这里是重头戏,我遇到了N多报错,搞了2天才成功。

    • License未授权问题
    * What went wrong:
      Could not determine the dependencies of task ':react-native-reanimated:mergeDebugNativeLibs'.
    
    > com.android.builder.sdk.LicenceNotAcceptedException: Failed to install the following Android SDK packages as some licences have not been 
    > accepted.
    > patcher;v4 SDK Patch Applier v4
    > ndk;25.0.8775105 NDK (Side by side) 25.0.8775105
    > To build this project, accept the SDK license agreements and install the missing components using the Android Studio SDK Manager.        
    > Alternatively, to transfer the license agreements from one workstation to another, see http://d.android.com/r/studio-ui/export-licenses.html
    
      Using Android SDK: C:\Dev\Android\SDK\android-sdk-windows
    
    * Try:
      Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full 
      insights.
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 1m 44s
    
    error Failed to install the app. Please accept all necessary Android SDK licenses using Android SDK Manager: "$ANDROID_HOME/tools/bin/sdkmanager --licenses". Run CLI with --verbose flag for more details.
    
    Error: Command failed: gradlew.bat app:installDebug -PreactNativeDevServerPort=8081  
    --------------------------------------------------------------------------------------------------------------------------------------------
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    其中可以看到这里分析到了是licenses导致的问题:

    > com.android.builder.sdk.LicenceNotAcceptedException: Failed to install the following Android SDK packages as some licences have not been 
    > accepted.
    
    • 1
    • 2

    解决
    到 android/sdk/tools/bin 目录下cmd 输入命令(授权):

    sdkmanager --licenses

    可能报错:

    Error: Unknown argument --licenses

    方法1:

    sdkmanager --update //更新sdk版本
    sdkmanager --help //检查sdk
    会出现以下SDK信息:
    Usage:
    sdkmanager [–uninstall] [] [–package_file=] […]
    sdkmanager --update []
    sdkmanager --list []
    sdkmanager --licenses [] --没这行的话说明还是不对。
    sdkmanager --version

    如果有licenses这一行,再次试一下授权:

    sdkmanager --licenses

    如果没有licenses这一行说明更新SDK版本并不解决证书问题,那么尝试方法2。

    方法2:把tools文件夹改成tools2,cmd进入tools2\bin文件夹,执行命令

    sdkmanager --include_obsolete “tools”

    这个命令会自动生成一个tools文件夹,生成后删掉tools2文件夹。再用

    sdkmanager --help

    就发现所有命令都回来了(目的就是重新拉一遍tools文件夹)。查看是否有licenses这一行。

    我是走方法1后无效再尝试方法2这么设置以后就好了。
    但此方法弊端:sdkmanager 和(模拟器管理界面) 打不开了

    以上解决了证书问题。


    • NDK版本/缺少文件问题
    
    Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
    Use '--warning-mode all' to show the individual deprecation warnings.
    See https://docs.gradle.org/6.2/userguide/command_line_interface.html#sec:command_line_warnings
    479 actionable tasks: 263 executed, 216 up-to-date
    ע: ijЩ�����ļ�ʹ�û򸲸����ѹ�ʱ�� API��
    ע: �й���ϸ��Ϣ, ��ʹ�� -Xlint:deprecation ���±��롣
    ע: ijЩ�����ļ�ʹ����δ�����򲻰�ȫ�IJ�����
    ע: �й���ϸ��Ϣ, ��ʹ�� -Xlint:unchecked ���±��롣
    
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Execution failed for task ':jcore-react-native:stripDebugDebugSymbols'.
    > No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi
    
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 3m 29s
    
    error Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup. Run CLI with --verbose flag for more details.
    Error: Command failed: gradlew.bat app:installDebug -PreactNativeDevServerPort=8081
    ע: ijЩ�����ļ�ʹ�û򸲸����ѹ�ʱ�� API��
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    其中可以看到这里问题出在缺少NDK中的文件。

    No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi
    
    • 1

    NDK是SDK文件夹下的一个文件夹。当时打开查看的时候确实发现没有提到的arm-linux-androideabi文件。

    解决
    参考了这一篇:https://juejin.cn/post/6844904141928529928,下载r16b版本的ndk(老版本里的啥都有),将缺少的文件复制到相应路径。(再次运行报了类似的错,不过是NDK缺少其他一些文件,在这里需要补全所有所需文件。)
    再次运行后:BUILD SUCCESSFUL!!!第一次build SUCCESSFUL!!!我超开心的!

    但还是没彻底跑起来。


    • 模拟器的adb和android sdk的adb版本不同的问题
    warn Failed to connect to development server using "adb reverse": Command failed: C:\Dev\Android\SDK\android-sdk-windows/platform-tools/adb -s 127.0.0.1
    :62001 reverse tcp:8081 tcp:8081
    info Starting the app on "127.0.0.1:62001"...
    adb.exe: device '127.0.0.1:62001' not found
    error Failed to start the app. Run CLI with --verbose flag for more details.
    Error: Command failed: C:\Dev\Android\SDK\android-sdk-windows/platform-tools/adb -s 127.0.0.1:62001 shell am start -n com.eccom.mobileapp/com.eccom.mobi
    leapp.MainActivity
        at makeError (D:\App\eccommobile\node_modules\execa\index.js:174:9)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    解决:这里是因为模拟器adb的版本和Android SDK里的adb版本不一致,可能一开始就用android studio的不会有这个问题。adb版本应该以Android SDK的为准。
    参考:https://blog.csdn.net/DaisyCold/article/details/111477842 ,这里的操作就是把sdk里的adb复制到模拟器里并验证两边版本是否一致。

    再次启动就可以在模拟器上看到项目了!!!!


    总结

    在公司装环境开心就开心在有前辈可能遇到过类似问题就可以帮忙解决,比起学生时代大家都不会也都不知道怎么弄也没耐心在网上搜要要条理得多。但难过就难过在实在不好意思太麻烦同事,这玩意我从周二早上弄到周四下午整整三天才成功,期间依赖导了无数次,版本搞了无数次,也把同事的项目里的配置文件直接复制过来试过,都遇到了各种各样的问题,有时候问题还是连环问题,为解决一个问题会引发一连串问题,一个个报错解决到后面都忘了最初是为了解决什么问题。

    本次是彻底面向同事+网络的跑通程序了,不得不庆幸是在新电脑上搭环境,运行速度和存储空间都够够的,网页开了几十个真的是常态。感谢几篇参考的博客给予的帮助!我不胜感激!并希望用我收获到的小小经验能帮助到一样迷了路的小伙伴们。

    刚学习app,后续一定有一堆坑会踩到,所以这是自用连载文~
    希望自己日益充实自己的知识库,慢慢变强!

  • 相关阅读:
    [数据集][目标检测]盲道检测数据集VOC+YOLO格式2173张1类别
    物业管理智慧小区活动报名小程序开发
    私服下载失败,下载不下来
    Node的模块化管理、Node的module对象、require命令、Buffer对象
    【算法作业】实验四:逆波兰表达式求值 & Fibonacci数列的尾递归与非递归程序
    StretchSense 打造了一款真正舒适的手部动作捕捉手套
    洋码头 根据ID取商品详情 API
    关联规则挖掘(下):数据分析 | 数据挖掘 | 十大算法之一
    iMazing苹果用户手机备份工具 兼容最新的iOS16操作系统
    ElasticSearch - 基于 docker 部署 es、kibana,配置中文分词器、扩展词词典、停用词词典
  • 原文地址:https://blog.csdn.net/weixin_42700882/article/details/126237997