V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
nealot
V2EX  ›  程序员

Android 项目中如何直接引入准备好的 .so 文件

  •  
  •   nealot · 2023-04-26 20:02:25 +08:00 · 1286 次点击
    这是一个创建于 606 天前的主题,其中的信息可能已经有所发展或是发生改变。

    native 常规开发流程大概是这样的:

    在 Android Studio 中创建一个项目, 项目类型选择最下面的 "Native C++", 名称就叫 native

    这时, 在 src/main/cpp 下会出现一个 native-lib.cpp 文件和对应的 CMakeLists.txt 文件, cpp 内容如下

    #include <jni.h>
    #include <string>
    
    extern "C" JNIEXPORT jstring JNICALL
    Java_com_example_native_MainActivity_stringFromJNI(
            JNIEnv* env,
            jobject /* this */) {
        std::string hello = "Hello from C++";
        return env->NewStringUTF(hello.c_str());
    }
    

    在 src/main/java/com/example/native/MainActivity.java 中 class MainActivity 中生成了一个对应的函数申明

        /**
         * A native method that is implemented by the 'native' native library,
         * which is packaged with this application.
         */
        public native String stringFromJNI();
    

    Java 程序通过这个接口访问 native 代码

    点击 Make Project 之后, 编译成功, 双击 build/outputs/apk/debug/app-debug.apk, 可以看到 apk 包含了 x86, x86_64, arm64_v8a, armeabi_v7a 四个平台的 libnative.so 文件


    请问有没有办法把编译出来的 .so 提取出来, 然后直接导入到一个新的 Android 工程中。这个新的工程直接把 .so 文件打包到 apk 中,新工程代码中完全不包含 C 代码?

    网上部分文章说,把 .so 文件放到 libs/arm64_v8a 等目录中就行, 打包 apk 时会自动包含, 但是实测下来没有效果, 似乎还有什么其它地方需要配置

    4 条回复    2023-04-27 09:37:37 +08:00
    whyrookie
        1
    whyrookie  
       2023-04-26 20:14:37 +08:00   ❤️ 2
    gradle 少了路径配置?
    sourceSets {
    main {
    jniLibs.srcDirs = ['libs']
    }
    }
    winterbells
        2
    winterbells  
       2023-04-26 21:00:56 +08:00
    除了 1L 的方法还可以将 c 代码放在模块里,打包发布成 aar 文件
    AoEiuV020CN
        3
    AoEiuV020CN  
       2023-04-27 00:05:30 +08:00 via Android
    工程配置问题建议找个现成的项目或者 demo 参考着,
    另外要说完全不包含 c 代码的话还可以导入个 jna ,直接用 java 调用任意 c/c++交互,
    Neoqee
        4
    Neoqee  
       2023-04-27 09:37:37 +08:00
    带上你原本 native 交互的 java 文件,然后创建 main/jniLibs 目录,在对应 abi 目录下放入对应的 so 文件就好了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   991 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:07 · PVG 07:07 · LAX 15:07 · JFK 18:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.