一些android studio中的比较好用的jar包

本文列举了在Android开发中的一些实用jar包,包括commons-io:2.4用于IO操作,javax.json-1.0.jar提供强大的JSON处理,okhttp-3.3.1.jar支持http/https通信,以及commoms-fileupload-1.3.2.jar用于文件上传。文中提到了这些库的特定功能和使用场景,例如okhttp在Android 5.0以下版本的SSL问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做项目时,发现一些好用的类,现小计一下,大神勿入:

dependencies {

    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'org.apache.commons:commons-lang3:3.4'
    compile 'commons-io:commons-io:2.4'
    compile files('libs/javax.json-1.0.jar')
    compile files('libs/okhttp-3.3.1.jar')
    compile files('libs/okio-1.8.0.jar')
    compile files('libs/commons-fileupload-1.3.2.jar')
}

其中,对于commons-io:commons-io:2.4 这个包,主要 使用的是IOUtils这个类,其提供了一些好用的方法,如IOUtils.toString(InputStream in)等。
对于javax.json-1.0.jar,其提供了功能更加强大的JSON数据的操作。
对于okhttp-3.3.1.jar,其提供了http和https的通信的一些功能,okhttp可以保证连接的可持续性,没各一定时间ping一次。还提供了发送muiltipart body的功能,另外对于该okhttp目前在android5.0以下的版本会出现SSLException的异常,主要原因是android底层TLS或者SSL的问题。
对于 commoms-fileupload-1.3.2.jar,提供了类似文件的储存功能,可以将multipart stream一层层的解析。

对于类的构造函数,其实都是static类型的。而static类型是存在class文件中的,private成员函数默认都是final类型的,所有不可以继承。

编译以上jar包的时候,会出现错误,此时是因为license文件不止一个,冲突的原因,只需在gradle文件中加入

packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
}

以下代码,可以建立HTTP连接,android自带 的HttpUrlConnection。

String END_POINT = "https:/www.google.com";
URL url = new URL(END_POINT);
HttpUrlConnection connection = (HttpUrlConnection)url.openConnection();

InputStream error = null;
InputStream response = null;
DataOutputStream outputStream = null;

connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type","application/json");
connection.setDoOutput(true);
connection.connect();
outputStream = new  DataOutputStream(connection.getOutputStream());
outputStream.write(data.getBytes(StandardCharSets.UTF_8));
outputStream.flush();
outputStream.close();

int res = connection.getResponseCode();
try{
    response = connection.getInputStream();
    JsonReader reader = Json.createReader(new InputStreamReader(response,StandardChatsets.UTF_8));
    return reader.readObject();
}catch(IOException e)  {
    e.printStackTrace();
}finally {
    IOUtils.closeQuietly(error);

}
public class AudioCapture {

    private static final boolean D = true;
    private static final String TAG = AudioCapture.class.getSimpleName();

    private MicroPhoneLine mMicPhoneLine;

    public AudioCapture () {
        int bufSize = AudioRecord.getMinBufferSize(MicroPhoneLine.SAMPLE_RATE_IN_HZ,
                MicroPhoneLine.CHANNEL_CONFIG,
                MicroPhoneLine.AUDIO_FORMAT);
        mMicPhoneLine = new MicroPhoneLine(MediaRecorder.AudioSource.DEFAULT,MicroPhoneLine
                .SAMPLE_RATE_IN_HZ,MicroPhoneLine.CHANNEL_CONFIG,MicroPhoneLine.AUDIO_FORMAT,bufSize);
    }

    public InputStream getAudioInputStream(final RecordingStateListener stateListener,
                                            final RecordingRMSListener rmsListener) {
        mMicPhoneLine.startRecording();
        PipedInputStream inputStream = new PipedInputStream(mMicPhoneLine.getBufferSize()*2);
        try {
            new AudioBufferThread(inputStream, stateListener, rmsListener).start();
        } catch (IOException e) {
            mMicPhoneLine.stop();
            e.printStackTrace();
        }
        return inputStream;
    }

    public void stopCapture() {
        mMicPhoneLine.stop();
    }


    private class AudioBufferThread extends Thread {

        private final AudioStateOutputStream audioStateOutputStream;

        public AudioBufferThread(PipedInputStream inputStream,
                                 RecordingStateListener recordingStateListener,
                                 RecordingRMSListener rmsListener)throws IOException {
            audioStateOutputStream =
                    new AudioStateOutputStream(inputStream, recordingStateListener, rmsListener);
        }

        @Override
        public void run() {

            if(D) Log.d(TAG, "startRecording...");
            while (mMicPhoneLine.isOpen()) {
                copyAudioBytesFromInputToOutput();
            }
            closePipedOutputStream();
            if(D) Log.d(TAG,"stop recording...");
        }

        private void copyAudioBytesFromInputToOutput() {

            byte[] data = new byte[mMicPhoneLine.getBufferSize() / 5];
            int numBytesRead = mMicPhoneLine.read(data, 0, data.length);
            try {
                if(numBytesRead>0)
                    audioStateOutputStream.write(data, 0, numBytesRead);
            } catch (IOException e) {
                mMicPhoneLine.stop();
            }
        }

        private void closePipedOutputStream() {
            try {
                audioStateOutputStream.close();
            } catch (IOException e) {

            }
        }
    }
}
apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "25.0.0"
    useLibrary 'org.apache.http.legacy'
    defaultConfig {
        applicationId "com.goertek.smartear"
        minSdkVersion 18
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    signingConfigs {
        debug {
            storeFile file("avs.keystore")
        }
        release{
            storeFile file("avs.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            zipAlignEnabled true
            //移除无用的资源文件
            shrinkResources true
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }

        /*

        debug {
            minifyEnabled true
            zipAlignEnabled true
            //移除无用的资源文件
            shrinkResources true
            signingConfig signingConfigs.debug
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
*/

    }


}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.android.support:support-v4:24.2.1'
    testCompile 'junit:junit:4.12'
    compile files('libs/commons-fileupload-1.3.2.jar')
    compile files('libs/javax.json-1.0.jar')
    compile files('libs/okhttp-3.3.1.jar')
    compile files('libs/okio-1.8.0.jar')
    compile files('libs/login-with-amazon-sdk.jar')
    compile 'commons-io:commons-io:2.4'
    compile 'org.apache.commons:commons-lang3:3.4'
    compile files('libs/org.apache.http.legacy.jar')
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值