Android-studio導(dǎo)入.so庫(kù)問(wèn)題?
問(wèn)題描述
我的目錄結(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è)就說(shuō)話速度快了。//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é)束后 在這兒開(kāi)啟語(yǔ)音識(shí)別 starlistining .//starlistining//總結(jié):通過(guò)1,2,3步驟可以實(shí)習(xí) 對(duì)助手說(shuō) 你好 它回答 我好 的時(shí)候 這個(gè)“我好”防止被語(yǔ)音識(shí)別再一次聽(tīng)到自己的聲音。 第3步是 說(shuō)完 “我好” 后自動(dòng)就開(kāi)啟識(shí)別了。等待用戶再一次說(shuō)話。 這和地方在用戶多輪交流時(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èn)題,我該怎么解決?網(wǎng)上有人說(shuō)是NDK的bug,我改了NDK版本也是同樣問(wèn)題,謝謝大家。
問(wèn)題解答
回答1:如果是你自己編譯的,不會(huì)有這個(gè)問(wèn)題,如果有別人的庫(kù),你用nm -Do libyourso.so查看一下他的包結(jié)構(gòu),然后在你的src/main/java下建一個(gè)相同的包路徑,把class名也改成和對(duì)方一樣
另外,如果用別人的,-v7a -v8a x86 x86_64每個(gè)單獨(dú)測(cè)試,我以前也遇到過(guò)這個(gè)問(wèn)題,非常不穩(wěn)定,有時(shí)能過(guò)有時(shí)不能過(guò)。把不需要的so及目錄刪除,逐個(gè)測(cè)試,留 下能過(guò)的那個(gè)so就行了
回答2:你確定是導(dǎo)入so庫(kù)造成的問(wèn)題么?如果是,你可以試試刪除-v7a -v8a x86 x86_64這些文件夾,然后試一下。或者在這些文件夾下放對(duì)應(yīng)格式的.so文件
回答3:這樣我們也無(wú)法確切知道問(wèn)題在哪,我建議,你可以先做個(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問(wèn)題多半是java包名與生成so的C或C++代碼的函數(shù)名不一致導(dǎo)致,你的so是你自己編譯的還是直接copy別人的?
回答5:這個(gè)不是有內(nèi)存溢出了啊
相關(guān)文章:
1. python文檔怎么查看?2. android - NavigationView 的側(cè)滑菜單中如何保存新增項(xiàng)(通過(guò)程序添加)3. javascript - ios返回不執(zhí)行js怎么解決?4. javascript - 請(qǐng)問(wèn)一下vue當(dāng)中是在什么時(shí)候請(qǐng)求數(shù)據(jù)保存全局變量的?5. 除了 python2 和 python3,ipython notebook 還可以用哪些內(nèi)核?6. 這段代碼既不提示錯(cuò)誤也看不到結(jié)果,請(qǐng)老師明示錯(cuò)在哪里,謝謝!7. mysql - 怎么生成這個(gè)sql表?8. 提示語(yǔ)法錯(cuò)誤語(yǔ)法錯(cuò)誤: unexpected ’abstract’ (T_ABSTRACT)9. tp5 不同控制器中的變量調(diào)用問(wèn)題10. 數(shù)據(jù)庫(kù) - mysql如何處理數(shù)據(jù)變化中的事務(wù)?
