2017-02-28 61 views
1

我在Gitgub中使用了一個開源項目。
我必須更改它的包名稱。
archArm.c功能代碼源的主要部分是:
使用android JNI

jstring 
    Java_com_github_hiteshsondhi88_libffmpeg_ArmArchHelper_cpuArchFromJNI(JNIEnv* env, jobject obj) 


和初級ArchArmHelper.java是:

package com.github.hiteshsondhi88.libffmpeg; 

class ArmArchHelper { 
static { 
    System.loadLibrary("ARM_ARCH"); 
} 

native String cpuArchFromJNI(); 

boolean isARM_v7_CPU(String cpuInfoString) { 
    return cpuInfoString.contains("v7"); 
} 

boolean isNeonSupported(String cpuInfoString) { 
    // check cpu arch for loading correct ffmpeg lib 
    return cpuInfoString.contains("-neon"); 
} 
} 


現在我編輯archArm的一部分。 c功能爲:

jstring 
Java_com_emad_amerian_libffmpeg_ArmArchHelper_cpuArchFromJNI(JNIEnv* env, jobject obj) 

我編輯我ArchArmHelper.java到:

package com.emad.amerian.libffmpeg; 
class ArmArchHelper { 
static { 
    System.loadLibrary("ARM_ARCH"); 
} 

native String cpuArchFromJNI(); 

boolean isARM_v7_CPU(String cpuInfoString) { 
    return cpuInfoString.contains("v7"); 
} 

boolean isNeonSupported(String cpuInfoString) { 
    // check cpu arch for loading correct ffmpeg lib 
    return cpuInfoString.contains("-neon"); 
} 
} 


我可以建立我的APK文件成功,但在運行時會啓動我的項目返回錯誤:

02-28 23:29:20.001 15094-15094/com.emad.amerian.sampleffmpeg E/art: No implementation found for java.lang.String com.emad.amerian.libffmpeg.ArmArchHelper.cpuArchFromJNI() (tried Java_com_emad_amerian_libffmpeg_ArmArchHelper_cpuArchFromJNI and Java_com_emad_amerian_libffmpeg_ArmArchHelper_cpuArchFromJNI__) 

回答

0

您需要使用JNIEXPORT和JNICALL宏導出函數:

JNIEXPORT jstring JNICALL Java_com_emad_amerian_libffmpeg_ArmArchHelper_cpuArchFromJNI(JNIEnv* env, jobject obj) 

這使該函數在庫的符號表中可見,以便Java VM可以鏈接它。

+0

謝謝,我測試了它,但返回了相同的錯誤 –

+0

您重建了.so文件嗎?有沒有任何警告或錯誤? – samgak

+0

我正在使用ready項目。那麼如何才能重建.so文件?項目鏈接是:github.com/WritingMinds/ffmpeg-android-java –