一、程序运行效果图

二、下载链接
三、实现
1、main.xml
2、MainActivity
package com.njupt.lame;
import java.io.File;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText et_wav;
private EditText et_mp3;
private ProgressDialog pd;
public native void convertmp3(String wav,String mp3);
public native String getLameVersion();
public native void stop();
static{
System.loadLibrary(Hello);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et_wav = (EditText) findViewById(R.id.editText1);
et_mp3 = (EditText) findViewById(R.id.editText2);
pd = new ProgressDialog(this);
}
public void convert(View view){
final String mp3name = et_mp3.getText().toString().trim();
final String wavname = et_wav.getText().toString().trim();
File file = new File(wavname);
int size = (int) file.length();
System.out.println(file size: + size);
if(.equals(mp3name) ||.equals(wavname)){
Toast.makeText(this, path can not be null.., 1).show();
return ;
}
pd.setMessage(converting....);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setMax(size);
pd.show();
new Thread(){
public void run() {
convertmp3(wavname, mp3name);
pd.dismiss();
};
}.start();
}
public void setConvertProgress(int progress){
pd.setProgress(progress);
}
public void getversion(View view){
String version = getLameVersion();
Toast.makeText(this, version, 1).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
3、Hello.c
#include#include #include com_njupt_lame_MainActivity.h #include #include #define LOG_TAG System.out #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) int flag = 0; char* Jstring2CStr(JNIEnv* env, jstring jstr) { char* rtn = NULL; jclass clsstring = (*env)->FindClass(env, java/lang/String); jstring strencode = (*env)->NewStringUTF(env, GB2312); jmethodID mid = (*env)->GetMethodID(env, clsstring, getBytes, (Ljava/lang/String;)[B); jbyteArray barr = (jbyteArray)(*env)->CallObjectMethod(env, jstr, mid, strencode); // String .getByte(GB2312); jsize alen = (*env)->GetArrayLength(env, barr); jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE); if (alen > 0) { rtn = (char*) malloc(alen + 1); // memcpy(rtn, ba, alen); rtn[alen] = 0; } (*env)->ReleaseByteArrayElements(env, barr, ba, 0); // return rtn; } void publish JavaProgress(JNIEnv * env, jobject obj, jint progress) { // 调用java代码 更新程序的进度条 // 1.找到java的LameActivity的class // jclass (*FindClass)(JNIEnv*, const char*); jclass clazz = (*env)->FindClass(env, com/njupt/lame/MainActivity); if (clazz == 0) { LOGI(can't find clazz); } LOGI( find clazz); //2 找到class 里面的方法定义 // jmethodID (