美文网首页
cc creator 打包apk 踩坑(内网环境)

cc creator 打包apk 踩坑(内网环境)

作者: zevolv | 来源:发表于2019-08-08 10:54 被阅读0次

    这一波坑,搜了很多资料,本文只能用于学习用途,不可作为其他用途

    一、内网打包

    1.打包的必要环境

    java 8 或以上  64位
    NDK r16 
    android studio 3.0 版本以上
    

    2.android studio 设置offline模式

    11.png 12.png

    3.修改gradlew.bat 在gradle执行那一行 末尾添加 --offline

    13.png 14.png

    4.gradle no cache version xxx.xxxx

    1.先用外网gradle缓存一下所需的依赖,(可以在外网打包一下应该会下载到 %userprofile%/.gradle 里面)然后将这个文件夹复制到内网就可以

    21.png

    2.提取 复制好的文件夹 %userprofile%/.gradle/caches/modules-2/files-2.1 里面的信息,这里提供一个简单的py脚本,我不熟悉gradle,只好自行解决

    #coding=utf-8
    import os,shutil
    
    def checkHasAFileInPath(dirname):
        files = os.listdir(dirname)
        count = 0
        filename = ""
        for name in files:
            if os.path.isfile(dirname+"/"+name):
                count = count + 1
                filename = name
        return count==1,filename
        
    # 将文件从base32拿出来
    def removeSomeUselessInfo(dirname):
        fnames = os.listdir(dirname)
        for name in fnames:
            subPath = "{0}/{1}".format(dirname,name)
            if "." != name and ".." != name  and os.path.isdir(subPath):
                # 这里我也不知道具体是多少,只是猜测base32的长度,一般范围都没啥问题
                if "." not in name and len(name) > 32:
                    fg,fileName = checkHasAFileInPath(subPath)
                    if fg:
                        shutil.move(subPath+"/"+fileName,dirname+"/"+fileName)
                        os.rmdir(subPath)
                else:
                    removeSomeUselessInfo(subPath)
    
    # 复制文件夹
    def copy2dir(src,dst):
        fnames = os.listdir(src)
        for name in fnames:
            dstname = dst+"/"+name
            if os.path.exists(dstname):
                shutil.rmtree(dstname)
            shutil.copytree(src+"/"+name,dstname)
        removeSomeUselessInfo(dst)
    
    EXPORT_PATH = None #"D:/exportm2Resiposity"
    # 生成对应的仓库目录
    def start(dirname):
        global  EXPORT_PATH
    
        exportDir = "%s/export"%dirname
        if EXPORT_PATH:
            exportDir = EXPORT_PATH
        if not os.path.exists(exportDir):
            os.mkdir(exportDir)
        fnames = os.listdir(dirname)
        for name in fnames:
            if "." != name and ".."!=name and name!="export":
                pathName = "%s/%s"%(exportDir,"/".join(name.split(".")))
                if not os.path.exists(pathName):
                    os.makedirs(pathName)
                copy2dir("%s/%s"%(dirname,name),pathName)
    
    
    if __name__ == "__main__":
        gradlePath = os.popen("echo %userprofile%/.gradle/caches/modules-2/files-2.1").read().strip()
        start(gradlePath)
    
    

    3.设置android studio的gradle,找到Android Studio的安装文件夹,安装目录的gradle里面也有一个m2repositiry,将上面处理好的导出文件复制到m2repositiry目录下

    23.png 24.png

    4.复制上面导出的m2repository到 sdk目录 的extras/m2repository目录下

    25.png 26.png

    5.修改构建的项目里面proj.android-studio文件夹下的gradle/wrapper/gradle-wrrapper.properties如下

    27.png 28.png
        distributionBase=GRADLE_USER_HOME
        distributionPath=wrapper/dists
        zipStoreBase=GRADLE_USER_HOME
        zipStorePath=wrapper/dists
        distributionUrl=xxxx  #这里的xxxx就是源文件中的url
    

    6.打包的时候可能会有build_tool版本过低,这时候需要去下载打包需要的build_tools到sdk目录的build_tools

    29.png

    二、内网打包中

    1、如果是windows,又恰好不支持长路径(windows10 14352版本之前都不支持),那么打包一般会出现一个问题,生成动态库 的过程会报错,...xxxx/inspector_socket_server.o ...xxxx/node_debug_options.o :No such file or directory 大概类似这样的报错。 如果不是windows或者window10 14352版本以上,就当我没说过。

    2、 其中会有 ....xxxxx\app\libs,not found ,这个好像不影响最后打包的结果,只是会有这个log,至少目前打包出来有这个报错的还是可以正常运行,好像在creator的issue里面有这个的解答,影响不大就暂时忽略了。

    三、打包好之后

    1、log里面如果是缺失setting.js 或者缺失 main.js 这样的描述的话,那么检查一下包体,是否把assets打包进去了

    如果assets没有打包进去,闪退的几率是100%,至少我在内网模拟器上跑着是这样的
    至于为什么会没有把assets打包进去呢,网上的答案似乎是因为gradle的版本导致的。
    解决的方案:
    ####1.打开 构建的项目里面proj.android-studio文件夹下面的app/build.gradle,在里面找到sourceSets.main,检查是否和下面一样

        sourceSets.main {
            assets.srcDir "assets"
            java.srcDir "src"
            res.srcDir "res"
            jniLibs.srcDir "libs"
            manifest.srcFile "AndroidManifest.xml"
        }
    
    
    18.png

    由于gradle新版本的问题,这里需要改为截图所示


    20.png

    2、 不闪退,就是一直黑屏,看log好像是eval “xxxxx.js” failed

    这个问题主要是代码报错导致的,确实一开始我也很好奇,浏览器明明跑得好好的,为什么到了这里偏偏就跑不起来,论坛上说是路径的问题。直接require文件名,不需要相对路径,有的话反而会报错之后项目终于跑起来没有报错了。

    相关文章

      网友评论

          本文标题:cc creator 打包apk 踩坑(内网环境)

          本文链接:https://www.haomeiwen.com/subject/mbptjctx.html