我的Android应用有一个NDK库。在使用Fire OS 4.5.5的Kindle Fire HD上运行时,应用程序无法加载NDK库,因为某些C标准库符号未解析,即它们似乎完全丢失:
data class Model(var test1: Int, var test2: Int): Parcelable {
constructor(source: Parcel): this(source.readInt(), source.readInt())
override fun describeContents(): Int {
return 0
}
override fun writeToParcel(dest: Parcel?, flags: Int) {
dest?.writeInt(this.test1)
dest?.writeInt(this.test2)
}
companion object {
@JvmField final val CREATOR: Parcelable.Creator<Model> = object : Parcelable.Creator<Model> {
override fun createFromParcel(source: Parcel): Model{
return Model(source)
}
override fun newArray(size: Int): Array<Model?> {
return arrayOfNulls(size)
}
}
}
}
rand()
srand()
使用Android 6的Nexus 5不会发生此问题。
有没有人知道为什么这些符号完全丢失,如果有某个缺失符号的官方列表?
是否还有其他“主要”Android问题,这些非传统的C标准库?
更新:我正在使用Android Studio 1.5.1和Gradle experimental plugin 0.4.0编译应用和NDK库。
signal()
更新:解决方法是在Gradle配置中设置此项,因为compileOptions.with {
sourceCompatibility=JavaVersion.VERSION_1_7
targetCompatibility=JavaVersion.VERSION_1_7
}
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig.with {
applicationId = "net.pol_online.hyper"
minSdkVersion.apiLevel = 18 // Android 4.3 Jelly Bean
targetSdkVersion.apiLevel = 23 // Android 6.0 Marshmallow
}
}
不会影响NDK:
minSdkVersion.apiLevel
答案 0 :(得分:0)
您确定已经针对正确的原生API级别构建了NDK库吗?如果你构建它的目标是android-21
或更新,并在较旧的Android版本上运行 - 特别是这些功能将失败。有关详细信息,请参阅https://stackoverflow.com/a/27338365/3115956和https://stackoverflow.com/a/27093163/3115956。