Termux源码导入遇到的问题

  今天看到一个有意思的项目--Termux,然后就把源码搞下来了。但是导入到Android Studio里编译运行的时候报错了!

java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader[DexPathList[[dex file "/data/data/com.termux/files/instant-run/dex/slice-support-annotations-23.3.0_22f92d96560c582f4641cd755383bea196ee8431-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-internal_impl-23.3.0_3144189e496bc31081b68ab24955a911f82ed66b-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-com.android.support-support-vector-drawable-23.3.0_df3704b01aa38b8a7f534fb8d2a80f23e576bcf8-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-com.android.support-support-v4-23.3.0_2a9351bfabee659f69965f79a9f0f22c2f914d2e-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-com.android.support-appcompat-v7-23.3.0_8d8d2297d7a78b982c4922fea66c068a8e28fd02-classes.dex", dex file "/data/data/com.termux/files/instant-run/dex/slice-com.android.support-animated-vector-drawable-23.3.0_16904b6df415103ab22dadb9dcc59453ef887292-classes.dex"],nativeLibraryDirectories=[/data/app/com.termux-1/lib/x86, /vendor/lib, /system/lib]]] couldn‘t find "libtermux.so"
  at java.lang.Runtime.loadLibrary(Runtime.java:367)
  at java.lang.System.loadLibrary(System.java:1076)
  at com.termux.terminal.JNI.<clinit>(JNI.java:9)
  at com.termux.terminal.TerminalSession.initializeEmulator(TerminalSession.java:175)
  at com.termux.terminal.TerminalSession.updateSize(TerminalSession.java:151)
  at com.termux.view.TerminalView.updateSize(TerminalView.java:828)
  at com.termux.view.TerminalView.attachSession(TerminalView.java:227)
  at com.termux.app.TermuxActivity.switchToSession(TermuxActivity.java:584)
  at com.termux.app.TermuxActivity.addNewSession(TermuxActivity.java:577)
  at com.termux.app.TermuxActivity$11.run(TermuxActivity.java:479)
  at com.termux.app.TermuxInstaller.setupIfNeeded(TermuxInstaller.java:72)
  at com.termux.app.TermuxActivity.onServiceConnected(TermuxActivity.java:463)
  at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1223)
  at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1240)
  at android.os.Handler.handleCallback(Handler.java:739)
  at android.os.Handler.dispatchMessage(Handler.java:95)
  at android.os.Looper.loop(Looper.java:148)
  at android.app.ActivityThread.main(ActivityThread.java:5417)
  at java.lang.reflect.Method.invoke(Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

  (其实现在我的内心是非常高兴的,原因你不懂。。)

  然后我这个小白那是好一通查资料,终于明白了这个项目中人家在gradle文件中屏蔽掉了默认的jni编译生成过程

    sourceSets {
        main {
            jni.srcDirs = []
        }
    }

  然后就需要手动使用ndk-build命令先编译好so文件然后才可以构建工程。我不想那么麻烦,依然想用gradle来完成,结果又是一通查。

  解决方案如下:

  首先把上面那段代码删掉,然后在defaultConfig中添加如下代码:

        ndk{
            moduleName "libtermux"
            cFlags "-std=c11 -Wall -Wextra -Os -fno-stack-protector"
        }

  问题就愉快地解决啦。

  注意!一定要有cFlags的配置,要不然会报这个错:

Error:(131, 9) error: ‘for‘ loop initial declarations are only allowed in C99 or C11 mode
时间: 2024-12-23 07:07:48

Termux源码导入遇到的问题的相关文章

Hadoop源码导入Eclipse

需要进一步学习hadoop.需要看看内部源码实现,因此需要将hadoop源码导入都eclipse中,简单总结一下,具体步骤如下: 首先确保已经安装了git.maven3.protobuf2.5.如果没有安装需要提前安装一下 1.下载hadoop源码 git clone git://git.apache.org/hadoop-common.git 2.进入hadoop-common目录,用maven生成eclipse工程 mvn install -DskipTests mvn eclipse:ec

spring源码解析——spring源码导入eclipse

一.前言     众所周知,spring的强大之处.几乎所有的企业级开发中,都使用了spring了.在日常的开发中,我们是否只知道spring的配置,以及简单的使用场景.对其实现的代码没有进行深入的了解.开卷有益,在我们空闲的时间里面阅读一下spring的源码,对提升我们的自身能力还是还有很大的帮忙.下面总结一下spring源码导入eclipse的具体的操作. 二.spring的特点 spring的的核心就是IOC(控制反转)和AOP(基于切面的编程) 事务管理方面采用了:声明式事务 为各种主流

tomcat源码导入eclipse

1. 获取源代码 方式一:从官网http://tomcat.apache.org/download-70.cgi 直接下载,官网提供了Binary 和 Source Code两种下载方式,要研究tomcat源代码,选择最下面的source code 方式下载 方式二:利用svn获取源代码,先安装svn,再新建目录tomcat7, 接着在目录里用 svn执行以下命令 svn co http://svn.apache.org/repos/asf/tomcat/tc7.0.x/tags/TOMCAT_

将Spring源码导入eclipse步骤

深入学习spring,研读源码是必须的~ 1.到https://github.com/spring-projects/spring-framework/releases去找自己需要的spring版本,并下载压缩包. 2.解压缩,如果在windows下,首先执行gradlew批处理程序,成功后,再执行import-into-eclipse批处理程序.根据不同的网络情况,经过一段时间,运行完毕后,可以看到源码的文件结构已经符合eclipse的格式了. 3.在eclipse中,导入源码文件夹即可. 将

Tomcat源码导入eclipse的步骤

Tomcat源码导入eclipse 一.下载源码 1.  进入Apache 官网:http://tomcat.apache.org/ 2.  在左边侧选择要下载的源码的版本. 3.  或者直接通过Archives进入源码目录 4.  源码目录如图,选择需要的版本, 5.  进入相应的源码目录下载相应的源码,我的演示下载的是8.026版本的源码. 二.ANT编译源码 如果没安装ant,请先安装ant,ant是一款编译工具. 编译步奏: 1.  解压源码压缩包 2.  设置依赖包的下载位置,把上步解

如何将OpenTSDB源码导入eclipse

OpenTSDB的官网上介绍了如何将OpenTSDB源码导入eclipse,官方链接,但步骤超级繁琐,还有一个简便方法,下面以导入OpenTSDB2.0.0为例. 1. 下载OpenTSDB2.0.0代码 wget https://codeload.github.com/OpenTSDB/opentsdb/tar.gz/v2.0.0 2. 解压并进入源码目录 tar zxf v2.0.0 cd opentsdb-2.0.0/ 3. 生成pom.xml文件 ./build.sh pom.xml 4

spring4.0源码导入

一个面试,让我知道了自己的不足,一天不进步就是倒退. spring源码导入eclipse 本人的环境 (我导入的是最新的spring 4.0 所以要用jdk1.8) 1 安装git (mac上自带了git  windows 上写一篇安装 msysgit 安装) 2 安装gradle 从http://www.gradle.org/downloads 下载gradle并安装 (稍后写一个安装gradle的博客) 3 从github上clone 源码 https://github.com/spring

如何将struts源码导入eclipse

预制条件和spring源码导入eclipse中一样,下面直接给出导入eclipse的步骤. 步骤: 1. 下载struts相应版本的源码 http://struts.apache.org/download.cgi .我这里下载的是struts-2.3.16-all.zip.下载完成后解压到本地目录. 2. struts的源码是通过maven管理的,所以需要下载maven http://maven.apache.org/download.cgi .下在完成后同样解压到本地目录,然后配置MAVEN_

tomcat源码导入eclipse步骤

1. 获取源代码 方式一:从官网http://tomcat.apache.org/download-70.cgi 直接下载,官网提供了Binary 和 Source Code两种下载方式,要研究tomcat源代码,选择source code 方式下载 方式二:利用svn获取源代码,先安装svn,再新建目录tomcat7, 接着在目录里执行以下命令 [java] view plaincopy svn co http://svn.apache.org/repos/asf/tomcat/tc7.0.x