‘壹’ 在MACOX上的androidSTUDIO如何编译OPENSSL原生的C库成动态的.SO库
目前暂不支持开发工具编译C、c++代码生成so文件,应该后续版本会有的。
.so 为共享库,是shared object,用于动态连接的,和dll差不多,可以这样调用so文件:
调用 System.out.println(System.getProperty("java.library.path"));
得到/usr/java/jdk1.5.0_13/jre/lib/i386,将SO文件放在该目录下
运行java程序,输出了由C语言函数计算出的结果
‘贰’ 在 Android Studio 中使用 ollvm 版本的 clang 编译 so
如果简单的使用 ollvm 版本的 clang.exe 等可执行文件替换掉原版 ndk toolchain 中的 exe,那么将会报一些头文件查找不到的错误,网上说的原因似乎是不同版本的 clang 将会使用的头文件有差异,然而如果在控制台中直接使用 ollvm 版本 clang 去手动执行编译命令,是可以正常编译成功得到 .o 文件的,以下是我避免该坑的方法:
打开 "YOUT_PROJECT_PATH\app.externalNativeBuild\cmake\debug\TARGET_ABI\rules.ninja",找到 "rule C_COMPILER__TARGET" 这一行(TARGET 指你在 CMakeLists.txt 中使用 add_library 指定的库名),然后你会在下面几行找到编译使用的 clang 路径,把它替换为你 ollvm 版本 clang 的路径,然后正常编译即可得到你想要的 so。
‘叁’ 用android studio引入第三方so库,怎么调不了方法
之前一直没有做过第三方的推送消息,这次公司要求采用国内极光第三方推送服务,由于项目还在原型图构思中,因而还可以花点时间看看这方面的东西。
看了下相关的DEMO,挺简单的,加点权限,把相关的广播以及服务注册一下就好了,然后在application中初始化一下,就解决了。可偏偏这么简单的几步,确花了我一点时间去调通。
过滤了相关的log如下
06-21 15:00:53.080 3006-3006/com.soo.jchatdemo E/JPush: [JPushInterface] System.loadLibrary::jpush215java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.soo.jchatdemo-2/base.apk"],nativeLibraryDirectories=[/system/lib, /vendor/lib, system/vendor/lib, system/vendor/lib/egl, system/lib/hw]]] couldn't find "libjpush215.so"
06-21 15:00:53.100 3006-3006/com.soo.jchatdemo W/System.err: at cn.jpush.android.api.JPushInterface.init(Unknown Source)
06-21 15:00:53.100 3006-3006/com.soo.jchatdemo E/JPush: [JPushGlobal] Get sdk version fail![获取sdk版本失败!]
06-21 15:00:53.100 3006-3006/com.soo.jchatdemo W/System.err: at cn.jpush.android.api.JPushInterface.init(Unknown Source)
06-21 15:00:53.100 3006-3006/com.soo.jchatdemo E/JPush: [JPushGlobal] JPush .so file do not match JPush .jar file in the project, Failed to init JPush
很
明显告诉我们,目前缺少了libjpush215.so文件。奇怪的是这so库已经在我们项目的libs中,之前在eclipse中这样完全能跑起来的。
问题是Android
Studio目前在打包的时候并没有在libs中复制SO库到项目中。因此我们需要在build.gradle中告诉AS执行复制so库文件。
android {
...
sourceSets {
main {
jni.srcDirs = []
jniLibs.srcDirs = ['libs']
}
}
}
然后重新Sync Now一下,整个世界都明亮了
‘肆’ androidstudio怎么将写好的so文件工程打包成jar包
Android Studio的so库导入和Eclipse的方式有些不同。在Android Studio中,要在工程的src/main下面新建一个jniLibs文件夹,然后将所用到的第三方so库复制进来,然后找到Project下的build.gradle文件,在其中添加以下几行代码:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {
destinationDir file("$projectDir/libs")
baseName "Native_Libs2"
extension "jar"
from fileTree(dir: "libs", include: "**/*.so")
into "lib"
}
然后重新Gradle一下代码,第三方so库就加了进来。
参考http://www.cnblogs.com/devpan/p/5536238.html
‘伍’ AndroidStudio如何配置NDK/JNIAndroidStudio怎么调用so动态链接库
AndroidStudio怎么调用so动态链接库?在我们日常开发中,经常会用到一些复杂的加密的算法以保证通信的安全。通常这些算法会用C或C++实现后打包成.so动态链接库并向Java层开发接口方便调用。
以AndroidStudio为例
1 . 首先去下载NDK包,下载路径如下可根据自己系统定点下载
https://developer.android.google.cn/ndk/downloads/index.html
static{
System.loadLibrary("jnitext");
}
publicnativeStringget_1111CLang_1String();
‘陆’ android studio 怎么打开so文件
先在Android studio导入一个项目,然后进入到项目中,依次进入到app>>src>>main下。
在main的文件下进行创建一个jnilibs,然后选中main的文件,进行右键,弹出框中点击“new”,移动下一级菜单中选择“directory”。
对创建的文件夹进行昵称,在昵称中进行输入“jnilibs”,然后点击“ok”。
这样在main的文件中创建一个为jnilibs的文件夹。
然后在jinlibs中文件进行添加so的文件,进入到so文件存放的文件中,直接把so的文件拖动到jinlibs的文件中。
拖动完成之后,会提示一个确认款提示信息,直接点击“ok”即可。
在non-project file access中第一个希望编辑文件,第二个为咱想在当前会话中编辑任何非项目文件,根据的自己需要进行选择,可以默认即可,点击ok。
这样就把so文件添加到jnilibs的文件中,这样的话程序的代码就可以进行调用其中方法。