You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
8.9 KiB
186 lines
8.9 KiB
#!/usr/bin/env python
|
|
import sys
|
|
import os
|
|
import re
|
|
import zipfile
|
|
import shutil
|
|
import logging
|
|
import string
|
|
|
|
templet = """include $(CLEAR_VARS)
|
|
LOCAL_MODULE := %s
|
|
LOCAL_MODULE_CLASS := APPS
|
|
LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/%s
|
|
LOCAL_SRC_FILES := $(LOCAL_MODULE)$(COMMON_ANDROID_PACKAGE_SUFFIX)
|
|
LOCAL_CERTIFICATE := PRESIGNED
|
|
LOCAL_DEX_PREOPT := false
|
|
LOCAL_ENFORCE_USES_LIBRARIES := false
|
|
LOCAL_MODULE_TAGS := optional
|
|
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
|
|
LOCAL_JNI_SHARED_LIBRARIES_ABI := %s
|
|
MY_LOCAL_PREBUILT_JNI_LIBS := %s
|
|
MY_APP_LIB_PATH := $(TARGET_OUT_ODM)/%s/$(LOCAL_MODULE)/lib/$(LOCAL_JNI_SHARED_LIBRARIES_ABI)
|
|
ifneq ($(LOCAL_JNI_SHARED_LIBRARIES_ABI), None)
|
|
$(warning MY_APP_LIB_PATH=$(MY_APP_LIB_PATH))
|
|
LOCAL_POST_INSTALL_CMD := \
|
|
cp -f $(LOCAL_PATH)/$(LOCAL_MODULE).apk $(LOCAL_MODULE_PATH)/$(LOCAL_MODULE)/ && \
|
|
mkdir -p $(MY_APP_LIB_PATH) \
|
|
$(foreach lib, $(MY_LOCAL_PREBUILT_JNI_LIBS), ; cp -f $(LOCAL_PATH)/$(lib) $(MY_APP_LIB_PATH)/$(notdir $(lib)))
|
|
endif
|
|
include $(BUILD_PREBUILT)
|
|
|
|
"""
|
|
|
|
copy_app_templet = """LOCAL_PATH := $(my-dir)
|
|
include $(CLEAR_VARS)
|
|
LOCAL_APK_NAME := %s
|
|
LOCAL_POST_PROCESS_COMMAND := $(shell mkdir -p $(TARGET_OUT_ODM)/%s/$(LOCAL_APK_NAME) && cp $(LOCAL_PATH)/$(LOCAL_APK_NAME).apk $(TARGET_OUT_ODM)/%s/$(LOCAL_APK_NAME)/)
|
|
"""
|
|
|
|
def main(argv):
|
|
preinstall_dir = os.path.join(argv[1],argv[2])
|
|
if os.path.exists(preinstall_dir):
|
|
#Use to include modules
|
|
isfound = 'not_found_lib'
|
|
include_path = preinstall_dir + '/preinstall.mk'
|
|
android_path = preinstall_dir + '/Android.mk'
|
|
target_arch = argv[4]
|
|
|
|
includefile = open(include_path)
|
|
androidfile = open(android_path)
|
|
if os.path.exists(include_path):
|
|
preinstallmk = includefile.read()
|
|
if os.path.exists(android_path):
|
|
androidmk = androidfile.read()
|
|
|
|
androidmk_holder = "include $(call all-subdir-makefiles)\n\n"
|
|
if androidmk != androidmk_holder:
|
|
androidfile.close()
|
|
androidfile = open(android_path, "w");
|
|
androidfile.write(androidmk_holder)
|
|
|
|
MY_LOCAL_PREBUILT_JNI_LIBS = '\\' + '\n'
|
|
|
|
for root, dirs, files in os.walk(preinstall_dir):
|
|
for file_name in files:
|
|
p = re.compile(r'\S*(?=.apk\b)')
|
|
found = p.search(file_name)
|
|
if found:
|
|
include_apk_path = preinstall_dir + '/' + found.group()
|
|
makefile_path = include_apk_path + '/Android.mk'
|
|
apk = preinstall_dir + '/' + found.group() + '.apk'
|
|
logging.info(apk)
|
|
try:
|
|
zfile = zipfile.ZipFile(apk,'r')
|
|
except:
|
|
if os.path.exists(include_apk_path):
|
|
shutil.rmtree(include_apk_path)
|
|
os.makedirs(include_apk_path)
|
|
apkpath = preinstall_dir + '/' + found.group() + '/'
|
|
shutil.move(apk,apkpath)
|
|
makefile = open(makefile_path,'w')
|
|
makefile.write("LOCAL_PATH := $(my-dir)\n\n")
|
|
makefile.write(templet % (found.group(),argv[3],'None',MY_LOCAL_PREBUILT_JNI_LIBS,argv[3]))
|
|
continue
|
|
for lib_name in zfile.namelist():
|
|
include_apklib_path = include_apk_path + '/lib' + '/arm'
|
|
if os.path.exists(include_apk_path):
|
|
shutil.rmtree(include_apk_path)
|
|
os.makedirs(include_apklib_path)
|
|
makefile = open(makefile_path,'w')
|
|
makefile.write("LOCAL_PATH := $(my-dir)\n\n")
|
|
apkpath = preinstall_dir + '/' + found.group() + '/'
|
|
if target_arch == 'arm64':
|
|
for lib_name in zfile.namelist():
|
|
lib = re.compile(r'\A(lib/arm64-v8a/)+?')
|
|
find_name = 'lib/arm64-v8a/'
|
|
if lib_name.find(find_name) == -1:
|
|
continue
|
|
libfound = lib.search(lib_name)
|
|
if libfound:
|
|
isfound = 'arm64-v8a'
|
|
data = zfile.read(lib_name)
|
|
string = lib_name.split(libfound.group())
|
|
libfile = include_apklib_path + '/' + string[1]
|
|
MY_LOCAL_PREBUILT_JNI_LIBS += '\t' + 'lib/arm64' + '/' + string[1] + '\\' + '\n'
|
|
if (os.path.isdir(libfile)):
|
|
continue
|
|
else:
|
|
includelib = open(libfile, 'wb')
|
|
includelib.write(data)
|
|
try:
|
|
if isfound != 'not_found_lib':
|
|
include_apklib_path_arm64 = include_apk_path + '/lib/arm64'
|
|
os.rename(include_apklib_path, include_apklib_path_arm64)
|
|
except Exception as e:
|
|
logging.warning('rename dir faild ' + str(e))
|
|
if isfound == 'not_found_lib':
|
|
for lib_name in zfile.namelist():
|
|
lib = re.compile(r'\A(lib/armeabi-v7a/)+?')
|
|
find_name = 'lib/armeabi-v7a/'
|
|
#if not (lib_name == find_name):
|
|
# continue
|
|
if lib_name.find(find_name) == -1:
|
|
continue
|
|
libfound = lib.search(lib_name)
|
|
if libfound:
|
|
isfound = 'armeabi-v7a'
|
|
data = zfile.read(lib_name)
|
|
string = lib_name.split(libfound.group())
|
|
libfile = include_apklib_path + '/' + string[1]
|
|
MY_LOCAL_PREBUILT_JNI_LIBS += '\t' + 'lib/arm' + '/' + string[1] + '\\' + '\n'
|
|
if(os.path.isdir(libfile)):
|
|
continue
|
|
else:
|
|
includelib = open(libfile,'wb')
|
|
includelib.write(data)
|
|
if isfound == 'not_found_lib':
|
|
for lib_name in zfile.namelist():
|
|
lib = re.compile(r'\A(lib/armeabi/)+?')
|
|
find_name = 'lib/armeabi/'
|
|
#if not (lib_name == find_name):
|
|
# continue
|
|
if lib_name.find(find_name) == -1:
|
|
continue
|
|
libfound = lib.search(lib_name)
|
|
if libfound:
|
|
data = zfile.read(lib_name)
|
|
string = lib_name.split(libfound.group())
|
|
libfile = include_apklib_path + '/' + string[1]
|
|
MY_LOCAL_PREBUILT_JNI_LIBS += '\t' + 'lib/arm' + '/' + string[1] + '\\' + '\n'
|
|
if(os.path.isdir(libfile)):
|
|
continue
|
|
else:
|
|
includelib = open(libfile,'wb')
|
|
includelib.write(data)
|
|
tmp_jni_libs = '\\' + '\n'
|
|
if MY_LOCAL_PREBUILT_JNI_LIBS == tmp_jni_libs:
|
|
nolibpath = preinstall_dir + '/' + found.group() + '/lib'
|
|
shutil.rmtree(nolibpath)
|
|
makefile.write(templet % (found.group(),argv[3],'None',MY_LOCAL_PREBUILT_JNI_LIBS,argv[3]))
|
|
else:
|
|
if isfound == 'arm64-v8a':
|
|
makefile.write(templet % (found.group(),argv[3], 'arm64', MY_LOCAL_PREBUILT_JNI_LIBS,argv[3]))
|
|
else:
|
|
makefile.write(templet % (found.group(),argv[3],'arm',MY_LOCAL_PREBUILT_JNI_LIBS,argv[3]))
|
|
shutil.move(apk,apkpath)
|
|
isfound = 'not_found_lib'
|
|
MY_LOCAL_PREBUILT_JNI_LIBS = '\\' + '\n'
|
|
makefile.close()
|
|
break
|
|
preinstallmk_new = ""
|
|
for root, dirs,files in os.walk(preinstall_dir):
|
|
for dir_file in dirs:
|
|
preinstallmk_new += 'PRODUCT_PACKAGES += %s\n' %dir_file
|
|
break
|
|
if preinstallmk_new != preinstallmk:
|
|
# print("different content, rewrite this one ", include_path)
|
|
includefile.close()
|
|
includefile = open(include_path,"w")
|
|
includefile.write(preinstallmk_new)
|
|
includefile.close()
|
|
androidfile.close()
|
|
|
|
if __name__=="__main__":
|
|
main(sys.argv)
|