基本上导入看起来都挺简单的,分以下几步
首先,在我们的Module的根目录中建立libs目录,将jpush集成SDK中的so文件分别拷入,截图如下:
然后就是编写我们的build.gradle文件。
关于so文件引入的配置很简单,代码配置如下:
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"
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
自定义一个任务,在其中指定项目所依赖的so文件的目录,这里用了**/*.so来写,为了省事,指定需要拷入的目录 into "lib",那么动态运行库就被拷入到lib目录中。
完整的build.gradle文件如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
applicationId "com.wujay.footerballstar"
minSdkVersion 8
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard 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"
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.0'
compile files('libs/jpush-sdk-release1.7.2.jar')
compile files('libs/umeng_sdk.jar')
compile files('libs/libammsdk.jar')
}
之后出现了
“undefined reference to `android_log_print”
这类问题的解决方法是1、在源文件中添加如下头文件:
#include <utils/Log.h>
2、在 Android.mk 文件中包含相关的库:
- 如果你生成的模块是一个共享库(.so),则将相关的库文件包含入共享库目录:
... ...
LOCAL_SHARED_LIBRARIES := liblog libcutils #相关的库文件,加入共享库目录
... ...
include $(BUILD_SHARED_LIBRARY) #注意:生成共享库 .so 文件
- 如果你生成的模块不是一个共享库,比如是可执行文件,则将相关的库文件包含入静态库目录:
... ...
LOCAL_STATIC_LIBRARIES := liblog libcutils #相关的库文件,加入静态库目录
... ...
include $(BUILD_EXECUTABLE) #注意:生成可执行文件
3、在源代码中需要打印 log 的地方执行:
LOGE(logformat); //如:LOGE("my num is: %d", i); 或者LOGD, LOGW,大家应该知道怎么区别吧