31 lines
		
	
	
		
			767 B
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			767 B
		
	
	
	
		
			V
		
	
	
module os
 | 
						|
 | 
						|
struct C.ANativeActivity {
 | 
						|
	assetManager &C.AAsetManager
 | 
						|
}
 | 
						|
 | 
						|
struct C.AAset {}
 | 
						|
 | 
						|
fn C.AAssetManager_open(&C.AAsetManager, charptr, int) &C.AAset
 | 
						|
fn C.AAsset_getLength(&C.AAset) int
 | 
						|
fn C.AAsset_read(&C.AAset, voidptr, int) int
 | 
						|
fn C.AAsset_close(&C.AAsset)
 | 
						|
 | 
						|
pub fn read_apk_asset(file string) ?[]byte {
 | 
						|
	act := &C.ANativeActivity(C.sapp_android_get_native_activity())
 | 
						|
	if isnil(act) {
 | 
						|
		return error('Could not get reference to Android activity')
 | 
						|
	}
 | 
						|
	asset := C.AAssetManager_open(act.assetManager, file.str, C.AASSET_MODE_STREAMING)
 | 
						|
	if isnil(asset) {
 | 
						|
		return error('File `$file` not found')
 | 
						|
	}
 | 
						|
	len := C.AAsset_getLength(asset)
 | 
						|
	buf := []byte{ len: len }
 | 
						|
	for {
 | 
						|
		if C.AAsset_read(asset, buf.data, len) > 0 { break }
 | 
						|
	}
 | 
						|
	C.AAsset_close(asset)
 | 
						|
	return buf
 | 
						|
}
 |