1. 程式人生 > >Ndk開發筆記

Ndk開發筆記

pla 框架 miss start 它的 ndk plus ner 通過

<pre name="code" class="cpp">ndk開發:
1.編譯android本地程序的二種方法.q
2.安裝ndk編譯工具.
3.編寫android.apk程序.
4.編寫jni接口.定義應用程序接口,
5.編寫Java文件,生成相應的字節碼文件.
6.使用javah -jni Test 命令生成該java文件相應的c的頭文件.
7.使用ndk-build命令生成相應的庫文件.

一:創建一個arm本地程序.直接使用arm-linux-gcc 進行編譯,假設使用到庫的話須要使用 -statickeyword進行靜態鏈接庫文件.

1.編譯android本地程序的三種方法:
	1.使用ndk開發工具進行編譯.
            a)安裝ndk android-ndk-r9d-linux-x86_64.tar.bz2 使用tar -xvf android-ndk-r9d-linux-x86_64.tar.bz2.
	    b)解壓完畢須要配置環境變量: 
              vim ~/.bashrc
	      加入以下的行. export PATH=/home/zshh/android-ndk-r9d:$PATH    //這個是解壓後ndk所在文件文件夾/home/zshh/android-ndk-r9d
	    c)拷貝一個ndk的例子文件到測試文件夾.例子文件存在/home/zshh/android-ndk-r9d/samples中.
	      $ cd /home/zshh/android-ndk-r9d/samples 下.
	      $ cp -a hello-jni/ ~/work/android/JNI/
	      $ [email protected]
/* */:~/work/android/JNI/hello-jni/jni$ vim Android.mk LOCAL_PATH := $(call my-dir) // LOCAL_PATH 指的是要編譯的文件夾. cd ~/work/android/JNI/hello-jni/ 使用ndk-build,該文件夾指的就是~/work/android/JNI/hello-jni/文件夾. include $(CLEAR_VARS) // 使用ndk進行編譯的時候.必須指定這項.它會清空Makefile中全部的變量值.使用android源碼進行編譯的時候,不能使用該項. LOCAL_MODULE := hello-jni // 編譯完畢之後的模塊的名稱. LOCAL_SRC_FILES := hello-jni.c // 生成模塊須要的.c文件. //以下的是兩者選其一. include $(BUILD_SHARED_LIBRARY) // 指定生成什麽樣的文件.還是動態庫文件. include $(BUILD_EXECUTABLE) // 指定生成什麽樣的文件.是可運行文件 改動一下hello-jni.c輸出Hello字符. 2.改動文件.生成可運行文件. [email protected]
/* */:~/work/android/JNI/hello-jni/jni$ vim hello-jni.c #if 0 #endif 凝視其它文件. 改動為例如以下: #include <string.h> #include <jni.h> int main(void) { printf("Hello\n"); return 0 ; } [email protected]:~/work/android/JNI/hello-jni/jni$ ndk-build /home/zshh/work/android/JNI/hello-jni/jni/hello-jni.c:57:2: warning: incompatible implicit declaration of built-in function ‘printf‘ [enabled by default] 進行編譯會輸出如上警告.是以為printf沒有包括stdlib.h頭文件.須要加入#include<stdlib.h>頭文件. [email protected]
/* */:~/work/android/JNI/hello-jni/jni$ ndk-build 生成例如以下文件. [email protected]:~/work/android/JNI/hello-jni/jni$ ndk-build [armeabi-v7a] Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi-v7a/gdbserver [armeabi-v7a] Gdbsetup : libs/armeabi-v7a/gdb.setup [armeabi] Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver [armeabi] Gdbsetup : libs/armeabi/gdb.setup [x86] Gdbserver : [x86-4.6] libs/x86/gdbserver [x86] Gdbsetup : libs/x86/gdb.setup [mips] Gdbserver : [mipsel-linux-android-4.6] libs/mips/gdbserver [mips] Gdbsetup : libs/mips/gdb.setup [armeabi-v7a] Install : hello-jni => libs/armeabi-v7a/hello-jni [armeabi] Install : hello-jni => libs/armeabi/hello-jni [x86] Install : hello-jni => libs/x86/hello-jni [mips] Install : hello-jni => libs/mips/hello-jni 他會編譯生成三個平臺的可運行文件,平臺如上. x86,mips,armeabi-v7a, 3.改動編譯生成指定平臺的可運行文件. [email protected]:~/work/android/JNI/hello-jni/jni$ vim Application.mk APP_ABI := all 這個是生成支持的三種平臺的可運行文件. APP_ABI := armeabi-v7a 僅僅會生成armeabi-v7a平臺的可運行代碼. 4.將生成的文件下載到開發版運行. //開機進入系統僅僅會.檢查usb是否插好.等待進入系統之後,運行掛載命令.是 [email protected]:~/work/android/JNI/hello-jni/jni$ adb shell mount -o remount,rw /system //這個命令的作用又一次使用讀寫權限掛載這個文件. //切換到編譯完畢的可運行文件所在文件夾. [email protected]:$ cd ~/work/android/JNI/hello-jni/libs/armeabi-v7a [email protected]:~/work/android/JNI/hello-jni/libs/armeabi-v7a$ adb push hello-jni /system //將應用程序下載到開發版的/system路徑下. 208 KB/s (9500 bytes in 0.044s) 5.最後測試能否成功輸出,Hello. [email protected]:~/work/android/JNI/hello-jni/libs/armeabi-v7a$ adb shell //通過android調試橋登入android操作系統. [email protected]:cd /system [email protected]:/system # ./hello-jni Hello 最後測試完畢.輸出Hello. 6.假設使用編譯完畢的android源碼進行編譯的話.須要改動Android.MK文件, a. 改動Android.mk [email protected]:~/work/android/JNI/hello-jni/jni$ vim Android.mk LOCAL_PATH := $(call my-dir) // LOCAL_PATH 指的是要編譯的文件夾. cd ~/work/android/JNI/hello-jni/ 使用ndk-build,該文件夾指的就是~/work/android/JNI/hello-jni/文件夾. #include $(CLEAR_VARS) // 這項須要凝視掉,它的作用是清除MK文件裏變量的值.使用android源碼編譯時,不須要這樣做.切記凝視. LOCAL_MODULE := hello-jni // 編譯完畢之後的模塊的名稱. LOCAL_SRC_FILES := hello-jni.c // 生成模塊須要的.c文件. //以下的是兩者選其一,指定生成什麽樣的文件. include $(BUILD_SHARED_LIBRARY) // 這個是生成動態庫文件. include $(BUILD_EXECUTABLE) // 這個是生成可運行文件 [email protected]$ cd /home/zshh/work/arm/ARM1/Android/android-4.2.2_r1 b.設置當前shell的運行環境. [email protected]:~/work/arm/ARM1/Android/android-4.2.2_r1$ source ~/.bashrc [email protected]:~/work/arm/ARM1/Android/android-4.2.2_r1$ source setenv including device/asus/grouper/vendorsetup.sh including device/asus/tilapia/vendorsetup.sh including device/friendly-arm/tiny4412/vendorsetup.sh including device/generic/armv7-a-neon/vendorsetup.sh including device/generic/armv7-a/vendorsetup.sh including device/generic/mips/vendorsetup.sh including device/generic/x86/vendorsetup.sh including device/lge/mako/vendorsetup.sh including device/samsung/maguro/vendorsetup.sh including device/samsung/manta/vendorsetup.sh including device/samsung/toroplus/vendorsetup.sh including device/samsung/toro/vendorsetup.sh including device/ti/panda/vendorsetup.sh including sdk/bash_completion/adb.bash c.使用mmm編譯須要編譯的文件夾. [email protected]:~/work/arm/ARM1/Android/android-4.2.2_r1$ mmm ~/work/android/JNI/jni_source_build/jni/ target Executable: hello-jni (out/target/product/tiny4412/obj/EXECUTABLES/hello-jni_intermediates/LINKED/hello-jni) /home/zshh/work/arm/ARM1/Android/android-4.2.2_r1/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6     /bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld: out/target/product/tiny4412/obj/lib/crtbegin_dynamic.o: in function _start:crtbrand.c(.text+0x60): error: undefined reference to ‘__libc_init‘ 假設出現的這個錯誤.那麽須要做包括libc庫, LOCAL_SHARED_LIBRARIES :=libc 加入完畢之後的Android.mk文件例如以下  LOCAL_PATH := $(call my-dir) // LOCAL_PATH 指的是要編譯的文件夾. cd ~/work/android/JNI/hello-jni/ 使用ndk-build,該文件夾指的就是~/work/android/JNI/hello-jni/文件夾. #include $(CLEAR_VARS) // 這項須要凝視掉,它的作用是清除MK文件裏變量的值.使用android源碼編譯時,不須要這樣做.切記凝視. LOCAL_MODULE := hello-jni // 編譯完畢之後的模塊的名稱. LOCAL_SRC_FILES := hello-jni.c // 生成模塊須要的.c文件.              LOCAL_SHARED_LIBRARIES :=libc //以下的是兩者選其一,指定生成什麽樣的文件. include $(BUILD_SHARED_LIBRARY) // 這個是生成動態庫文件. include $(BUILD_EXECUTABLE) // 這個是生成可運行文件 [email protected]:~/work/arm/ARM1/Android/android-4.2.2_r1$ mmm ~/work/android/JNI/jni_source_build/jni/'     Install: out/target/product/tiny4412/system/bin/hello-jni       假設成功編譯,生成的目標文件存在hello-jni文件out/target/product/tiny4412/system/bin/hello-jni     d.接下來的步驟,和步驟5.是一樣的. 二:創建一個NDK本地程序. 該程序的功能是控制led的亮滅. 1.搭建一個eclipse環境.eclipse.tar.gz a.解壓這文件. [email protected]:~/work/android$ tar -xvf eclipse.tar.gz -C software //解壓 [email protected]:~/work/android$ cd software/eclipse/ [email protected]:~/work/android/software/eclipse$ ./eclipse & //運行eclipse b.使用這個ide環境創建一個android apk應用程序. 它大概的功能是提供四個button,當按下當中某個button的時候,就讓某個燈亮起來. c.創建一個Test文件,當中包括接口文件例如以下: 1.定義c和java之間的接口.控制亮滅, 1.1.第一個接口應該是打開設備文件. native int openLed(); 1.2.最後一個是關閉設備文件. native int closeLed(); 1.3.第二個接口應該是亮, native int ledOn(int no); 1.4.第三個接口應該是滅. native int ledOff(int no); 2. [email protected]:~/work/android/JNI/NDKnative$ vim Test.java /************************************************************************* > File Name: Test.java > Author: zshh0604 > Mail: [email protected] > Created Time: Mon 22 Dec 2014 10:48:09 PM ************************************************************************/ public class Test { native int openLed(); native int closeLed(); native int onLed(int no); native int offLed(int no); static{ System.loadLibrary("led"); } public static void main(String[] args) { } } 3.編譯生成字節碼文件. [email protected]:~/work/android/JNI/NDKnative$ javac Test.java 4.生成相應的頭文件,該命令運行完畢之後.會生成Test.h頭文件. [email protected]:~/work/android/JNI/NDKnative$ javah -jni Test 5.拷貝一個NDK代碼例子.並把Test.h頭文件復制到當前文件的jni文件夾中. [email protected]:~/work/android/JNI$ mkdir Jni 6.獲取ndk開發工具的代碼例子. [email protected]:~/work/android/JNI/Jni$ cp -a ../../../../android-ndk-r9d/samples/hello-jni/ ./ [email protected]:~/work/android/JNI/Jni/jni$ cp ../../NDKnative/Test.h 7.將Test.h改名為led.c, mv Test.h led.c [email protected]:~/work/android/JNI/Jni/jni$ mv Test.h led.c 8.獲取apk應用的完整類名.com_embsky_MainActivity //講這個名稱替換當前Test類名. 使用vim打開led.c文件,再命令行模式下使用例如以下命令吧Test替換成com_embsky_MainActivity :%s/Test/com_embsky_MainActivity/g. 得到例如以下文件: #include <jni.h> #include <sys/types.h> #include <stdlib.h> #include <fcntl.h> #include <errno.h> static int fd; static int flags = 0; /* * Class: com_embsky_MainActivity * Method: openLed * Signature: ()I */ JNIEXPORT jint JNICALL Java_com_embsky_MainActivity_openLed (JNIEnv *env, jobject obj) { if(flags == 0) { fd = open("dev/leds",O_RDWR); if(fd< 0) { return -EPERM; } flags = 1; return 0 ; } return -EBUSY; } /* * Class: com_embsky_MainActivity * Method: closeLed * Signature: ()I */ JNIEXPORT jint JNICALL Java_com_embsky_MainActivity_closeLed (JNIEnv *env , jobject obj) { if(flags == 1) { close(fd); flags = 0; return 0; } return -ENODEV; } /* * Class: com_embsky_MainActivity * Method: onLed * Signature: (I)I */ JNIEXPORT jint JNICALL Java_com_embsky_MainActivity_onLed (JNIEnv *env , jobject obj, jint no) { int ret; if(flags == 1) { ret = ioctl(fd,1 ,no); if(ret < 0 ) { return -EPERM; } return 0 ; } return -ENODEV; } /* * Class: com_embsky_MainActivity * Method: offLed * Signature: (I)I */ JNIEXPORT jint JNICALL Java_com_embsky_MainActivity_offLed (JNIEnv * env, jobject obj, jint no) { int ret; if(flags == 1) { ret = ioctl(fd, 0, no); if(ret < 0) { return -EPERM; } return 0; } return -ENODEV; } 9.改動Android.mk文件,例如以下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := leds LOCAL_SRC_FILES := led.c include $(BUILD_SHARED_LIBRARY) [email protected]:~/work/android/JNI/Jni/jni$ ndk-build 11.生成動態庫例如以下:[armeabi-v7a] Install : libleds.so => libs/armeabi-v7a/libleds.so 12.將動態庫push到開發板的/system/lib文件夾下. [email protected]:~/work/android/JNI/Jni/libs/armeabi-v7a$ adb push libleds.so /system/lib 13.動態庫制作完畢. 14.創建一個apk應用,創建一個類: com.embsky.MainActivity.再這個類中載入並調用本地庫led. javah -d ../jni com.onesuncomm.JniCallCTest 三: 使用android源碼編譯apk應用程序.System.loadLibaray("led"); [email protected]:~/work/android/android/07Jar/JniAndroidSrc$ ls Android.mk led.c 使用這兩個文件編譯生成libled.so文件. [email protected]:~/work/android/android/06Jni/JniAndroidSrc$ vim Android.mk。  僅僅須要。Android.mk和led.c兩個文件. 1.使用android源碼編譯android應用程序,    LOCAL_PATH := $(call my-dir)   LOCAL_MODULE := libled //註意必須是在led前面加上lib,編譯生成的庫名是.libled.so,使用   LOCAL_SRC_FILES := led.c        LOCAL_SHARED_LIBRARIES :=libc   include $(BUILD_SHARED_LIBRARY)     2.編譯libled.so庫文件. [email protected]:~/work/arm/ARM1/Android/android-4.2.2_r1$ source setenv [email protected]:~/work/arm/ARM1/Android/android-4.2.2_r1$ mmm ~/work/android/android/06Jni/JniAndroidSrc/ 3.輸出編譯完畢的路徑例如以下.   Install: out/target/product/tiny4412/system/lib/libled.so 4.將生成的libled.so push到/system/lib中.  Install: out/target/product/tiny4412/system/lib/libled.so   [email protected]:[email protected]412/system/lib$ adb push libled.so /system/lib/ 115 KB/s (5276 bytes in 0.044s) 5.生成Android fremework文件夾的 jar包。 [email protected]:~/work/android/android/07Jar/Jar$ ls   Android.mk com/embsky/Led.java     //包括兩個java文件. package com.embsky; public class Led { native int openLed(); native int closeLed(); native int ledOn(int no); native int ledOff(int no); static { System.loadLibrary("led"); } public int ledStart(){ /*nothing*/ return openLed(); } public int ledStop(){ return closeLed(); } public int ledOps(int no, int on){ if(on == 1){ return ledOn(no); } return ledOff(no); } } 6.改動Android.mk文件. LOCAL_PATH :=$(call my-dir) LOCAL_SRC_FILES :=$(call all-subdir-java-files) //當前src文件夾下的全部文件. LOCAL_MODULE :=led LOCAL_JAVA_LIBRARIES := include $(BUILD_JAVA_LIBRARY)                                 //包括這個生成的是Java的類庫. 7.完畢之後。能夠編譯生成這個.jar文件. [email protected]:~/work/arm/ARM1/Android/android-4.2.2_r1$ source setenv [email protected]:~/work/arm/ARM1/Android/android-4.2.2_r1$ mmm ~/work/android/android/07Jar/Jar/ 8. 生成的jar包會存放在,            Install: out/target/product/tiny4412/system/framework/led.jar       註意編譯的時候,該文件夾一定要由讀寫權限.否則會失敗.   假設由於權限問題。能夠使用chown zshh:zshh out/target/product/tiny4412/system/framework -R   更改用戶屬主.       生成完畢之後須要將這個framework下的led.jar放到開發版的/system/framework文件夾下. [email protected]:[email protected]412/system/framework$ adb push led.jar /system/framework/ 9.須要改動開發板中 /etc/permissions   //再platform.xml文件裏聲明我們的框架庫文件.否則這個led.jar無法使用. [email protected]:/etc/permissions # vim platform.xml <library name="led" file="/system/framework/led.jar"/>      之後重新啟動一下開發版, 10.編譯android apk            [email protected]:~/work/android/android/07Jar/Apk$ ls //apk包括例如以下文件和文件夾. AndroidManifest.xml Android.mk res src                須要改動AndroidManifest.xml文件. <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.embsky" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="17" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <uses-library android:name="led" />                 //聲明依賴的led.jar文件.假設不聲明能夠編譯通過,但運行會由錯誤. <activity android:name="com.embsky.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> [email protected]:~/work/android/android/07Jar/Apk$ gedit Android.mk LOCAL_PATH :=$(call my-dir) LOCAL_SRC_FILES :=$(call all-subdir-java-files) LOCAL_PACKAGE_NAME :=Led LOCAL_JAVA_LIBRARIES :=led //註意這裏必須聲明依賴的java庫. include $(BUILD_PACKAGE)          [email protected]:~/work/arm/ARM1/Android/android-4.2.2_r1$ mmm ~/work/android/android/07Jar/Apk/ 這個是編譯生成的apk文件Install: out/target/product/tiny4412/system/app/Led.apk [email protected]:[email protected]412/system/app$ adb push Led.apk /system/app/ 5099 KB/s (294516 bytes in 0.056s)



Ndk開發筆記

相關推薦

Ndk開發筆記

pla 框架 miss start 它的 ndk plus ner 通過 <pre name="code" class="cpp">ndk開發: 1.編譯android本地程序的二種方法.q 2.安裝ndk編譯工具. 3.編寫android.apk程序. 4

NDK開發筆記——Android使用openssl

Android自身使用了谷歌的openssl分支boringssl,因此,如果要在Android中使用openssl,需要編譯成靜態庫整合在自己的程式當中。為Android編譯openssl,首先需要獲取到openssl的原始碼和Android ndk,利用ndk中的交叉編譯

NDK開發筆記---CMake構建JNI

  從AndroidStudio2.2版本開始,預設使用 CMake 的方式來構建NDK專案,也可以使用 ndk-build 的方式,這裡我們主要介紹 CMake 的方式。   首先,介紹 NDK

NDK開發筆記(一)---環境搭建

安裝NDK開發環境:   結果: 執行 cygwin ,在彈出的命令列視窗輸入: cygcheck -c cygwin 命令,會打印出當前 cygwin 的版本和執行狀       態,如果 status 是 ok 的話,則 cygwin 執行正常。       然後依次

Android NDK開發及OpenCV初步學習筆記

-a cep cto strip 鏈接 jni 加載 idt jniexport https://www.jianshu.com/p/c29bb20908da Android NDK開發及OpenCV初步學習筆記 Super_聖代 關註 2017.08.19 00:

Android逆向基礎筆記—Android NDK開發2之Windows下的gcc手動編譯(交叉連編譯)和利Linux Ubuntu系統下的交叉工具鏈手動編譯

一、交叉工具鏈 這些工具都在NDK的路徑下:E:\Android\android-ndk-r13\toolchains\arm-linux-androideabi-4.9\prebuilt\windo

Android學習筆記之:NDK開發環境配置

   NDK 即Native Development Kit,因此又被Google稱為“NDK”。 1,提高程式的效能:把需要高效能的應用邏輯使用C開發, 2,程式程式碼進行保護:因為反編譯C/C++

Android逆向基礎筆記—Android NDK開發4之Android studio NDK自動編譯

這部分就是最後的部分了,為什麼要寫Android studio呢。大家知道,eclipse 到了現在,已經不被Google支援了,所以現在最好的開發就是利用Android studio。雖然說,網上有

微信公眾號開發筆記1(nodejs開發的)

.post err log 加密 課堂 是我 targe 分享 gty 本篇記錄了微信公眾號開發的一些筆記 一、微信服務器與我們服務器的交流 微信開發者擁有自己的服務器,在我們服務器上可以與微信服務器進行交流。既然可以交流,那就必定需要前提條件(微信認證),也就是說,只有自

張高興的 Windows 10 IoT 開發筆記:使用 ULN2003A 控制步進電機

uln2003 zhang windows iot ges 開發 ima dem win   GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/ULN2003A   張高興的 Wind

張高興的 Windows 10 IoT 開發筆記:三軸數字羅盤 HMC5883L

cnblogs -i mas https http png 開發 target 分享   註意,數據不包含校驗,準確的來說我不知道怎麽校驗,但方向看起來差不多是對的。。。   GitHub:https://github.com/ZhangGaoxing/windows-io

Android NDK 開發總結

設置 .text nbsp def runt 編寫 abi 文件的 targe 一.安裝配置環境 1.安裝Android Studio,下載路徑https://developer.android.com/studio/index.html?hl=zh-cn。我下載的是Win

JNI/NDK開發指南(2)

清除 onu 呼叫 rac 個人理解 運行 ati clas 函數 1.生成動態庫.so,存放於手機的system/lib/中(APP怎樣將.so存入該文件夾,奇怪?????),Java層調用JNI的類會運行靜態代碼System.loadLibrary("***")將手

微信開發筆記-調用自定義分享接口

彈出菜單 菜單 開發筆記 n-1 onf target ready 模式 時間戳 文章來自:http://www.cnblogs.com/ysyn/archive/2015/07/23/4665897.html 引言:   工作中開發微信網站,簡稱微網站。由於微

Android開發筆記(12)——ListView & Adapter

dba 只顯示一行 -1 ngs 而已 整理 adapt array xxx 轉載請註明:http://www.cnblogs.com/igoslly/p/6947225.html 下一章是關於ListFragment的內容,首先先介紹ListView的相關配置,理解L

android NDK開發中,用Cygwin調試本地代碼時報錯“Another debug session running,Use --force to kill it”原因及解決的方法

能夠 att cati kill 時報 andro 使用 deb gdb調試 在使用ndk-gdb調試的時候。運行$NDK/ndk-gdb --verbose報錯“Another debug session running,Use --force to kil

微信二次分享功能開發筆記

如何 設置 _id 朋友 start 還需要 str one data   最近的一個項目在進行二次分享的時候出現了問題,定制的文案描述及圖片都不能在分享後出現,如圖所示:                           經過十八般折騰,終於變成我想要的樣式了,如圖:

Kinect開發筆記之三Kinect開發環境配置具體解釋

pc2 1.0 微軟 .aspx 技術分享 連接 實驗 family 不同 0、前言: 首先說一下我的開發環境,Visual Studio是2013的,系統是win8的64位版本號,SDK是Kinect for windows

CoolBlog開發筆記第4課:數據庫模型設計

的人 model類 set 來看 aid 想想 目錄 targe init 教程目錄 1.1 CoolBlog開發筆記第1課:項目分析 1.2 CoolBlog開發筆記第2課:搭建開發環境 1.3 CoolBlog開發筆記第3課:創建Django應用 前言   我新書《

Vue-cli開發筆記一----------項目的結構

web node lin sch scrip base via 裏的 ack 配置文件package.json: 搜索了配置的原理:https://segmentfault.com/a/1190000000344102 裏面講到:npm會在package.json文件中找s