试图分叉jackpal的终端模拟器

时间:2017-07-01 20:55:42

标签: java android c++ android-ndk java-native-interface

我正在尝试使用jackpal的source code来改进我的应用,但我无法意识到如何让它发挥作用。

这些是TermExec.java中的一些行

public class TermExec {

static {
    System.loadLibrary("jackpal-termexec2");
}

那么,为什么它是“jackpal-termexec2”当我猜他的意思的图书馆被称为“termExec.cpp”?

无论如何,它们都没有用,我试过它们(System.loadLibrary(“termExec”),但我得到了一个UnsatisfiedLinkError

这是我的app / src / main / cpp文件夹:
common.cpp
COMMON.H
fileCompat.cpp
fileCompat.h
process.cpp
process.h
termExec.cpp
termExec.h

和我的CMakeLists.txt(但是,我没有在jackpal的项目中找到CMakeLists.txt文件)

cmake_minimum_required(VERSION 3.4.1)

add_library( # Specifies the name of the library.
         common

         # Sets the library as a shared library.
         SHARED

         # Provides a relative path to your source file(s).
         src/main/cpp/common.cpp )

add_library( # Specifies the name of the library.
         fileCompat

         # Sets the library as a shared library.
         SHARED

         # Provides a relative path to your source file(s).
         src/main/cpp/fileCompat.cpp )

add_library( # Specifies the name of the library.
         process

         # Sets the library as a shared library.
         SHARED

         # Provides a relative path to your source file(s).
         src/main/cpp/process.cpp )



add_library( # Specifies the name of the library.
         termExec

         # Sets the library as a shared library.
         SHARED

         # Provides a relative path to your source file(s).
         src/main/cpp/termExec.cpp )

include_directories(src/main/cpp/)

2 个答案:

答案 0 :(得分:0)

我的建议是只关注术语模块,我刚刚将我的fork更新为O

https://github.com/Surge1223/Android-Terminal-Emulator.git

我建议使用" android.deprecatedNdkCompileLease = 1501314830007"而不是CMAKE。除非aosp gerrit将开始摆脱目前建立ndk库的计划,否则我真的没有看到在工作室中使用ndk构建的绝对形式。特别是考虑到工作室中关于ndk支持的可怕文档。

大多数人都有问题让hello-jni继续构建。无论如何,你想要发布不满意的链接器错误,并且lib的名称不依赖于源文件的名称。

我知道我做了一个非常可怕的更新源代码的工作,但它适用于最新的gradle版本的最新canary。

答案 1 :(得分:0)

jackpal的项目包含两个.so文件。

jackpal-androidterm5包含:

common.cpp
fileCompat.cpp
termExec.cpp

jackpal-termexec2包含:

process.cpp

因此,不是所有的add_library函数都使用:

 add_library( # Sets the name of the library.
        jackpal-androidterm5

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        common.cpp
        fileCompat.cpp
        termExec.cpp) 

add_library( # Sets the name of the library.
        jackpal-termexec2

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        process.cpp)

然后,您应该添加到CMakeLists target_link_librariesfind_library中,以在应用程序中查找库,或者从apk文件中提取.so,然后使用它。