Android-studio導(dǎo)入.so庫(kù)問題?
問題描述
我的目錄結(jié)構(gòu)
一下是主activity
package com.iflytek.tts;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import com.iflytek.tts.TtsService.Tts;import com.iflytek.tts.R;public class TtsJniDemo extends Activity implements View.OnClickListener { //在lib目錄下有AisoundDemo.so 文件 private static final String TAG = 'AisoundDemo'; private TextView txtView; //準(zhǔn)備讀的文字 private String text = '??????????'; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// uiTextView textView = (TextView) findViewById(R.id.textView);EditText editText = (EditText) findViewById(R.id.editText);Button startButton = (Button) findViewById(R.id.startButton);Button stopButton = (Button) findViewById(R.id.stopButton);startButton.setOnClickListener(this);stopButton.setOnClickListener(this);if (!editText.getText().toString().equals('')){ text = editText.getText().toString();}textView.setText(text);// ttsTts.JniCreate('/sdcard/Resource.irf');Tts.JniSetParam(1282, -11000);//1282可能是 調(diào)整語(yǔ)速的id 后面的-11000 是它的值。 比如Tts.JniSetParam(1282, -15000); 改成這個(gè)就說話速度快了。//Tts.JniSetParam(1280, 4); 這個(gè)是別的參數(shù) 看看改4 這個(gè)數(shù)字看看 我也不知道是什么//Tts.JniSetParam(1297, 20); 這個(gè)是別的參數(shù) 看看改20 這個(gè)數(shù)字看看 我也不知道是什么//Tts.JniSetParam(1282, 20000); 這個(gè)是別的參數(shù) 看看改20000 這個(gè)數(shù)字看看 我也不知道是什么 } @Override public void onClick(View v) {switch (v.getId()){ case R.id.startButton:onClickStart();break; case R.id.stopButton:onClickStop();break;} } public void onClickStop(){//Tts.JniStop(); } public void onClickStart(){//JniSpeak參數(shù)是文字 給什么文字就讀什么文字。 此代碼只是維吾爾語(yǔ)言的離線合成。Tts.JniSpeak(text);//1。在這兒關(guān)閉語(yǔ)音助手的識(shí)別 stoplistening// stoplisteningdo { //2.這個(gè)的作用是 等到 語(yǔ)音合成結(jié)束時(shí)前 不要執(zhí)行任何事情}while (Tts.JniIsPlaying()==0);//3.語(yǔ)音合成結(jié)束后 在這兒開啟語(yǔ)音識(shí)別 starlistining .//starlistining//總結(jié):通過1,2,3步驟可以實(shí)習(xí) 對(duì)助手說 你好 它回答 我好 的時(shí)候 這個(gè)“我好”防止被語(yǔ)音識(shí)別再一次聽到自己的聲音。 第3步是 說完 “我好” 后自動(dòng)就開啟識(shí)別了。等待用戶再一次說話。 這和地方在用戶多輪交流時(shí)有用。 }}
以下是Tts.java
package com.iflytek.tts.TtsService;//import com.iflytek.tts.MessageDemo;import com.iflytek.tts.TtsJniDemo;public final class Tts{ static {System.loadLibrary('Aisound'); } public static String getString; /** * */ public synchronized static void startReadThread(TtsJniDemo ttsJniDemo){class TtsRunThread implements Runnable { @Override public void run() {JniSpeak(getString); }}Thread ttsRun = (new Thread(new TtsRunThread()));ttsRun.setPriority(Thread.MAX_PRIORITY);ttsRun.start(); } public static native int JniGetVersion(); public static native int JniCreate(String resFilename); public static native int JniDestory(); public static native int JniStop(); public static native int JniSpeak(String text); public static native int JniSetParam(int paramId,int value); public static native int JniGetParam(int paramId); public static native int JniIsPlaying(); public static native boolean JniIsCreated();}
以下是錯(cuò)誤信息
我在android-studio導(dǎo)入一個(gè).so庫(kù)的時(shí)候遇到了以上問題,我該怎么解決?網(wǎng)上有人說是NDK的bug,我改了NDK版本也是同樣問題,謝謝大家。
問題解答
回答1:如果是你自己編譯的,不會(huì)有這個(gè)問題,如果有別人的庫(kù),你用nm -Do libyourso.so查看一下他的包結(jié)構(gòu),然后在你的src/main/java下建一個(gè)相同的包路徑,把class名也改成和對(duì)方一樣
另外,如果用別人的,-v7a -v8a x86 x86_64每個(gè)單獨(dú)測(cè)試,我以前也遇到過這個(gè)問題,非常不穩(wěn)定,有時(shí)能過有時(shí)不能過。把不需要的so及目錄刪除,逐個(gè)測(cè)試,留 下能過的那個(gè)so就行了
回答2:你確定是導(dǎo)入so庫(kù)造成的問題么?如果是,你可以試試刪除-v7a -v8a x86 x86_64這些文件夾,然后試一下。或者在這些文件夾下放對(duì)應(yīng)格式的.so文件
回答3:這樣我們也無法確切知道問題在哪,我建議,你可以先做個(gè)調(diào)用so的demo,so里面就寫一個(gè)簡(jiǎn)單的方法,對(duì)應(yīng)java里面一個(gè)方法,方法命名都檢查清楚,一一對(duì)應(yīng),把so文件先只放在armeabi文件夾下,然后再按照網(wǎng)上的介紹的一些例子試著把這一個(gè)方法調(diào)試成功,成功了然后再去試著調(diào)試你上面的代碼
回答4:No JNI_OnLoad found in問題多半是java包名與生成so的C或C++代碼的函數(shù)名不一致導(dǎo)致,你的so是你自己編譯的還是直接copy別人的?
回答5:這個(gè)不是有內(nèi)存溢出了啊
相關(guān)文章:
1. html5 - 有可以一次性把所有 css外部樣式轉(zhuǎn)為html標(biāo)簽內(nèi)style=" "的方法嗎?2. javascript - 求解答:實(shí)例對(duì)象調(diào)用constructor,此時(shí)constructor內(nèi)的this的指向?3. javascript - 如何將一個(gè)div始終固定在某個(gè)位置;無論屏幕和分辨率怎么變化;div位置始終不變4. python - 如何判斷爬蟲已經(jīng)成功登陸?5. javascript - 原生canvas中如何獲取到觸摸事件的canvas內(nèi)坐標(biāo)?6. javascript - 這不是對(duì)象字面量函數(shù)嗎?為什么要new初始化?7. javascript - vscode alt+shift+f 格式化js代碼,通不過eslint的代碼風(fēng)格檢查怎么辦。。。8. javascript - 有什么比較好的網(wǎng)頁(yè)版shell前端組件?9. javascript - [js]為什么畫布里不出現(xiàn)圖片呢?在線等10. html - vue項(xiàng)目中用到了elementUI問題
