12/08/2018, 11:04

Sử dụng NDK trên Android Studio 1.3 or hight

Đầu tiên, sự hỗ trợ Android NDK chỉ làm việc với experimental Gradle plugin mới cho Android (mà lần lượt yêu cầu Gradle 2.5). Trong khi các plugin mới gradle cung cấp một số cải tiến hiệu suất lớn (và Android NDK build support), lưu ý rằng nó cũng đòi hỏi sự thay đổi để xây dựng tập tin "DSL" ...

Đầu tiên, sự hỗ trợ Android NDK chỉ làm việc với experimental Gradle plugin mới cho Android (mà lần lượt yêu cầu Gradle 2.5).

Trong khi các plugin mới gradle cung cấp một số cải tiến hiệu suất lớn (và Android NDK build support), lưu ý rằng nó cũng đòi hỏi sự thay đổi để xây dựng tập tin "DSL" (cách bạn xây dựng được mô tả trong các tập tin build.gradle của bạn.) Không chỉ cần phải sửa đổi các tập tin build.gradle của bạn, mà còn tạo ra cho một số thay đổi không tương thích bổ sung cho cách vận hành.

Thứ hai, lưu ý rằng cũng Android Studio chưa được cập nhật đầy đủ để xử lý các plugin thử nghiệm. Điều này có nghĩa là ví dụ Cấu trúc dự án Dialog, và nhanh chóng sửa chữa khác nhau mà sẽ tự động cập nhật các dữ liệu xây dựng, không làm việc một cách chính xác. Bạn sẽ cần phải chỉnh sửa các tập tin build.gradle của bạn bằng tay để cấu hình các dự án của bạn. Một ví dụ khác, các mẫu khác nhau trong đó cập nhật các tập tin xây dựng (như New Module), chưa được cập nhật.

Cuối cùng, vẫn còn một số lỗi được biết đến trong xây dựng; khi debug với LLĐB breakpoint không luôn luôn làm việc trên Windows; nếu bạn chạy vào điều này, bạn có thể chuyển sang GDB debug như một cách giải quyết tạm thời.

Trong lịch sử, NDK Android đã được phân phối một cách riêng biệt từ SDK Android, như một tập tin .zip tải khổng lồ, và được cài đặt ở một vị trí riêng biệt từ nơi SDK Android cư trú.

Trong phiên bản này, chúng tôi đã cố gắng để thống nhất này; các NDK bây giờ sẽ được cài đặt theo các nhà SDK trong "ndk-bunlder". Chúng tôi đã cập nhật các IDE tích hợp SDK Manager để cho bạn cài đặt các NDK ở đúng nơi, và Cấu trúc dự án panel SDK Location Dialog của (nơi bạn có thể chỉnh sửa các vị trí), bây giờ cũng cung cấp một liên kết nhanh chóng để cài đặt nó trực tiếp; chỉ cần click vào Download siêu liên kết dưới đây:ndk-install-link.png Lưu ý rằng NDK là 1 tập tin rất lớn(~ 1 GB) nên trừ khi bạn có một kết nối mạng thực sự tuyệt vời, chuẩn bị phải kiên nhẫn ...

Phát biểu của tải lớn, cũng lưu ý rằng bản cập nhật IDE bản vá lỗi từ trước 1.3 được xây dựng với trang này là thực sự lớn: không chỉ gây build này chứa tất cả các mã mới để hỗ trợ phát triển Android NDK, nhưng nó cũng chứa các tập tin nhị phân LLĐB (~ 200 MB không nén ).

Thực hiện theo các tài liệu Experimental Gradle Plugin trong đó mô tả làm thế nào để sửa đổi dự án của bạn để sử dụng các phiên bản hiện tại của các plugin thử nghiệm, hoặc

Kiểm tra một số các mẫu NDK Android hiện đã được cập nhật để làm việc với các plugin mới Gradle. Để kiểm tra các mẫu, gọi VCS> Checkout từ Version Control> Git, và trong hộp thoại kết quả điểm để https://github.com/googlesamples/android-ndk.git. Chọn một địa điểm để kiểm tra mẫu vào. Chú ý: Khi kết thúc việc nhập khẩu các IDE sẽ hỏi nếu bạn muốn tạo ra một dự án từ các nguồn kiểm tra ra. Trả lời không có. Các dự án git android-ndk chứa một số lượng lớn các dự án riêng biệt. Thay vào đó, một khi nhập khẩu được thực hiện, bạn vào File> Open ..., và điều hướng đến (ví dụ) các thư mục Teapot và chọn build.gradle tập tin trong thư mục đó. Hiện nay dự án sẽ được mở và được đồng bộ hóa. Điều này sẽ mất một thời gian lần đầu tiên như các plugin mới Gradle và phụ thuộc được tải xuống. Khi bạn đang thực hiện, bạn có thể nhìn vào nguồn dự án và bắt đầu khám phá các IDE hỗ trợ cho Android NDK.

Ví dụ, trong các View Project bạn sẽ thấy rằng dự án có một "JNI" nguồn đặt bên cạnh các "java" nguồn tập bình thường; đó là nơi bạn sẽ tìm thấy mã nguồn gốc:ndk-jni-folder.png Bây giờ bạn có thể xây dựng và điều hành dự án, và khám phá các tính năng chỉnh sửa khác nhau: Mã hoàn thành Mã chuyển hướng (đi đến khai báo, nhảy giữa tiêu đề và thực hiện, vv) sửa chữa nhanh chóng Intentions refactoring định dạng nguồn ... viducode.pngChuyển từ Android truyền thống Gradle Plugin

Một dự án điển hình Android Studio có thể có một cấu trúc thư mục như sau. Tập tin mà cần phải có sự thay đổi được đánh dấu màu đỏ: Có một số thay đổi đáng kể trong các DSL giữa các plugin mới và truyền thống.

.
├── app/
│   ├── app.iml
│   ├── build.gradle
│   └── src/
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew*
├── gradlew.bat
├── local.properties
├── MyApplication.iml
└── settings.gradle

./gradle/wrapper/gradle-wrapper.properties
The new plugin supports only gradle-2.5.
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-2.5-all.zip

./build.gradle
Classpath for the plugin is com.android.tools.build:gradle-experimental instead of com.android.tools.build:gradle.
The current version is 0.2.0.

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.2.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

./app/build.gradle

Có những thay đổi đáng kể cho DSL của các plugin:

_Tên Plugin được com.android.model.application thay vì com.android.application. Hoặc sử dụng áp dụng plugin: 'com.android.model.library' nếu bạn muốn tạo ra một thư viện AAR Android. Cấu hình được gói với các mô hình {} block Hầu hết các đặc tính yêu cầu các nhà điều hành = Thêm yếu tố để một Bộ sưu tập nên được thực hiện bằng cách sử dụng + = điều hành.

_BuildTypes, productFlavors và signingConfigs phải được đặt bên ngoài của android {} block. Tùy chọn lồng nhau trong android {} khối phải được cấu hình bằng cách sử dụng với từ khóa. Thuộc tính chỉ được thiết lập chỉ với loại trực tiếp của họ, không có cách nào để chấp nhận các loại khác và thích ứng chúng. Vi dụ như: Các tính chất của loại tập tin chỉ nhận các tập tin thay vì tập tin và các đối tượng String. minSdkVersion không thể trực tiếp nhận được hoặc là một số nguyên hoặc chuỗi (cho codename). Tạo một buildType hoặc productFlavor đòi hỏi phải gọi phương thức tạo ra. Sửa đổi mẫu có sẵn như việc phát hành và debug buildType có thể được thực hiện bằng cách sử dụng chỉ là tên.

apply plugin: 'com.android.model.application'
model {
    android {
        compileSdkVersion = 11
        buildToolsVersion = "22.0.1"

        defaultConfig.with {
            applicationId = "com.example.nativecodec"
            minSdkVersion.apiLevel = 11
            targetSdkVersion.apiLevel = 11
        }
    }
    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles += file('proguard-rules.txt')
        }
    }
    android.ndk {
        moduleName = "native-codec-jni"
        // for native windows
        ldLibs += "android"
        toolchain = "clang"
        toolchainVersion = "3.5"
    // Note that CFlags has a capital C, which is inconsistent with
    // the naming convention of other properties.  This is a
    // technical limitation that will be resolved
        CFlags += "-DCUSTOM_DEFINE"
        cppFlags += "-DCUSTOM_DEFINE"
        ldFlags += "-L/custom/lib/path"
        ldLibs += "log"
        stl = "stlport_static"
    }
    android.productFlavors {
        create("arm7") {
            ndk.abiFilters += "armeabi-v7a"
        }
        create("arm8") {
            ndk.abiFilters += "arm64-v8a"
        }
        create("x86") {
            ndk.abiFilters += "x86"
        }
        // for detailed abiFilter descriptions, refer to "Supported ABIs" @
        // https://developer.android.com/ndk/guides/abis.html#sa
        // build one including all productFlavors
        // build one including all productFlavors
        create("fat")
    }
}
0