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

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

一、内网打包

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文件名,不需要相对路径,有的话反而会报错之后项目终于跑起来没有报错了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容