调整loadLib加载安卓so库的策略(需要等待后续测试)

This commit is contained in:
MrZ626
2021-08-24 18:01:29 +08:00
parent 8520ca44ee
commit 9eaa00e878

View File

@@ -1,51 +1,23 @@
return function(name,libName)
if SYSTEM=='Windows'or SYSTEM=='Linux'then
local r1,r2,r3=pcall(require,libName[SYSTEM])
if r1 and r2 then
return r2
else
MES.new('error',"Cannot load "..name..": "..(r2 or r3))
end
elseif SYSTEM=='Android'then
local fs=love.filesystem
local platform={'arm64-v8a','armeabi-v7a'}
for i=1,#platform do
local soFile,_,_,mes1=fs.read('data','libAndroid/'..platform[i]..'/'..libName.Android)
if soFile then
local success,mes2=fs.write('lib/'..libName.Android,soFile)
if success then
libFunc,mes2=package.loadlib(SAVEDIR..'/lib/'..libName.Android,libName.libFunc)
if libFunc then
MES.new('check',name.." lib loaded")
break
else
MES.new('error',"Cannot load "..name..": "..mes2)
end
else
MES.new('error',("Write %s-%s to saving failed: %s"):format(name,platform[i],mes2))
end
else
MES.new('error',("Read %s-%s to saving failed: %s"):format(name,platform[i],mes1))
end
end
if not libFunc then
MES.new('error',"Cannot load "..name)
package.cpath=package.cpath..';'..SAVEDIR..'/lib/lib?.so;'..'?.dylib'
return function(libName)
if SYSTEM=='Android'then
local platform=(function()
local p=io.popen('uname -m')
local arch=p:read('*a'):lower()
p:close()
return
end
return libFunc()
elseif SYSTEM=="OS X" then
local rtn = package.loadlib(libName["OS X"], libName.libFunc)
if rtn then
local a = rtn()
MES.new('check',name.." lib loaded")
return a
else
MES.new('error',"Cannot load "..name)
end
else
MES.new('error',"No "..name.." for "..SYSTEM)
return
arch=='aarch64'or arch=='arm64'and'arm64-v8a'or
'armeabi-v7a'
end)()
love.filesystem.write(
'lib/libCCloader.so',
love.filesystem.read('data','libAndroid/'..platform..'/libCCloader.so')
)
end
local r1,r2,r3=pcall(require,libName)
if r1 and r2 then
return r2
else
MES.new('error',"Cannot load "..libName..": "..(r2 or r3))
end
return true
end