如何编译新版的libjpeg-turbo 出so文件给Android使用

如何编译新版的libjpeg-turbo 出so文件给Android使用,第1张

你好,1、从官网下载最新的libjpeg-turbo源码,
2、解压缩下载的文件,然后进入,并创建jni文件夹,最后将里面的文件都拷贝到jni文件中
3、进入jni目录,然后创建配置文件(例如jconfigh,configh),在终端输入:
[cpp]
/configure --with-jpeg8
/configure --with-jpeg8
就会生成
[cpp]
configstatus: creating configh
configstatus: creating jconfigh
configstatus: creating configh
configstatus: creating jconfigh4、接下来是创建Androidmk文件
[cpp]
# Makefile for libjpeg-turbo
##################################################
### simd ###
##################################################
LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
LOCAL_CFLAGS += -D__ARM_HAVE_NEON
# From autoconf-generated Makefile
EXTRA_DIST = simd/nasm_ltsh simd/jcclrmmxasm simd/jcclrss2asm simd/jdclrmmxasm simd/jdclrss2asm \
simd/jdmrgmmxasm simd/jdmrgss2asm simd/jcclrss2-64asm simd/jdclrss2-64asm \
simd/jdmrgss2-64asm simd/CMakeListstxt
libsimd_SOURCES_DIST = simd/jsimd_arm_neonS \
simd/jsimd_armc
LOCAL_SRC_FILES := $(libsimd_SOURCES_DIST)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/simd \
$(LOCAL_PATH)/android
AM_CFLAGS := -march=armv7-a -mfpu=neon
AM_CCASFLAGS := -march=armv7-a -mfpu=neon
LOCAL_ARM_MODE=arm
LOCAL_MODULE_TAGS := debug
LOCAL_MODULE := libsimd
include $(BUILD_STATIC_LIBRARY)

task copyNativeLibs(type: Copy) {
from(new File(project(':MyProject')buildDir, 'native-libs')) { include '/so' }
into new File(buildDir, 'native-libs')
}

taskswithType(Compile) { compileTask -> compileTaskdependsOn copyNativeLibs }

cleandependsOn 'cleanCopyNativeLibs'

taskswithType(comandroidbuildgradlePackageApplicationTask) { pkgTask ->
pkgTaskjniDir new File(buildDir, 'native-libs')
}
(2)新版本三种方法:
(21)打包前先生成Jar文件后自动解包到apk文件
task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') {
destinationDir file("$buildDir/native-libs")
baseName 'native-libs'
extension 'jar'
from fileTree(dir: 'libs', include: '/so')
into 'lib/'
}

taskswithType(Compile) {
compileTask -> compileTaskdependsOn(nativeLibsToJar)
}
下面一句话就是打包生成目录(build\native-libs)中的jar文件
compile fileTree(dir: "$buildDir/native-libs", include: 'native-libsjar')
(22)手动生成Jar文件后自动解包到apk文件
这个方式需要自己手动进行SO文件压缩,具体步骤为:将所有需要使用的so文件压缩为zip文件(zip中的文件目录结构为: lib/armeabi/so)然后把zip文件后缀改为Jar然后放到libs生成apk就ok
默认就是自动打包所有Jar文件:
dependencies {
compile fileTree(dir: 'libs', include: 'jar')
}
(23)这也就是现在正在使用的方式(推荐) ,其实无非就是把SO文件打包到APK的lib文件夹中,假如仔细阅读了Gradle的使用方法,自然就知道其实Gradle官方在新版已经自动实现了打包SO文件的很简单级就是在配置的android节点下加入下面的内容就ok:
sourceSets {
main {
jniLibssrcDirs = ['libs']
}
}
其他地方无需修改,整个项目的配置文件如下:
apply plugin: 'android'

android {
compileSdkVersion 19
buildToolsVersion "1900"

defaultConfig {
minSdkVersion 16
targetSdkVersion 19
versionCode 1
versionName "10"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-androidtxt'), 'proguard-rulestxt'
}
}
sourceSets {
main {
jniLibssrcDirs = ['libs']
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['jar'])

1、去除不必要的依赖,检查所有直接和间接的依赖关系
2、去除不用的资源,asset下的文件没用的就删掉,res下的,尤其是,没用的就删,在buildgradle中release标签里加上shrinkResources true,没有的资源就不会被打到包里了
3、启用代码混淆,混淆不仅可以防止反编译,也可以减小包的体积,它主要是把包里的dex文件变小了

apk文件可以简单的通过压缩软件进行打开,打开后有如下目录:

1assets(文件夹,内部可能有文件夹,这里也有资源、配置文件)

2res(文件夹,resource的缩写,存放等数据,解压出来后可直接查看)

可能出现目录:

①anim(文件夹,存放动画资源,未反编译情况下为乱码)

②xml(文件夹,存放的xml文件,未反编译情况下为乱码)

③raw(文件夹,存放资源文件)

3classesdex(文件,很重要的文件,可通过dex2jarbat将其转换为jar再通过jd-gui查看)

4META-INF(文件夹,存放系统签名文件)

5resourcesarsc(文件,编译后的二进制资源文件的索引,用处不大,涉及汉化时考虑的文件)

6lib(文件夹)

①armeabi(子目录,存放的是一些so文件)

7AndroidManifestxml(xml文件,描述了应用的名字、版本、权限、引用的库文件等信息)

注:上诉中的乱码可以使用apktool进行反编译后查看,请勿反编译别人的程序用作盈利或者其他商业用途

导致丢失文件的可能有以下几种:
1杀毒软件误杀
2安装包或者压缩包有问题
建议你重新安装一次这个程序,最好在关掉杀毒软件的前提下运行,如果还不行,可能与系统兼容性有关


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12784127.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-27
下一篇2025-08-27

发表评论

登录后才能评论

评论列表(0条)

    保存