【问题标题】:How to use the generated .so library in another Android Project?如何在另一个 Android 项目中使用生成的 .so 库?
【发布时间】:2016-09-19 21:13:05
【问题描述】:

我关注了http://kn-gloryo.github.io/Build_NDK_AndroidStudio_detail/,效果很好!但是,我想在一个新的 Android 应用程序中使用生成的 .so 库,而我根本不知道该怎么做……我已经苦苦挣扎了好几天,如果可以分享任何分步教程那会很有帮助!

这是我用来生成 .so 文件的 Android 项目 MyApp

主要活动:

Java 类:MyNDK

头文件:com_demo_ble_myapp_MyNDK.h

Cpp 文件:我的图书馆

这是我的新Android项目useSOLib的结构,我只是将所有so文件从MyApp\app\src\main\libs复制到 useSoLib\app\src\main\jniLibs

这是 useSoLib 中的 MainActivity:

我可以 Build-> Make Project 成功,但是当我在设备上运行它时,应用程序显示“不幸的是,useSoLib 已停止。”并粉碎。我知道我在这里错过了一些步骤,但我是 Android Studio 的新手,所以我不知道应该从哪里开始......提前感谢您的任何建议! :)

【问题讨论】:

  • 您的本机代码可能有问题。您是否尝试过使用 log 或 gdb 来检查您的代码的哪一行导致了异常?
  • 感谢您的回复!在MyApp项目的MainActivety中(我用来生成.so库),我新建了一个MyNDK的实例,叫做原生函数getMyString,它在设备上运行成功,我也可以在里面看到正确返回的String我的 logcat,所以我假设本机 C++ 函数运行良好。就在我尝试使用不同的包名从其他 Android 项目访问生成的 .so 库时,它崩溃了……我还在上面添加了我的头文件和 cpp 文件以供参考。
  • 您的代码错误。看我的回答。您必须导出 Java 类并使用 *.so 文件将其导入新项目。

标签: java android-studio android-ndk java-native-interface shared-libraries


【解决方案1】:

您应该导入 MyNDK 并使用它的实例。 JNI 库与 Java 类有关。修改代码:

public class MainActivity extends AppCompatActivity{
   @Override
   protected void onCreate(Bundle savedInstanceState){

       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       Log.i("MyTag", new MyNDK().getMyString());
   }
}

您可以将 MyNDK 类导出为 jar 包或创建 aar 包。然后使用 JNI 库将 Java 类导入到您的新项目中。

How to Build *.so Library Files into AAR Bundle in Android Studio 的帖子可能会对您有所帮助。

【讨论】:

  • 我正在尝试做一个 aar,但到目前为止没有运气...我将用一些图片编辑我的问题以显示我所做的事情,如果有什么我想请告诉我错过了,非常感谢! :)
猜你喜欢
  • 2011-08-05
  • 2018-09-26
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多